OmniAuth +身份忘记密码

siz*_*zle 6 identity ruby-on-rails omniauth

我正在开发一个Rails 3.0应用程序,并使用OmniAuth + Identity进行身份验证注册.我已经实现了一个通过外键与Identity模型绑定的User模型,一切运行良好.现在,我想实现忘记密码功能.

给定用户的电子邮件,我想向他们发送一封电子邮件,其中包含重置密码的链接.该电子邮件包含与用户关联的随机十六进制字符串.

现在,如何重置用户的身份密码?

在Identity数据库表中,它存储为password_digest.我可以覆盖这个吗?

edu*_*udi 10

做这个:

@identity = Identity.find(1)
@identity.password = "newpassword"
@identity.password_confirmation = "newpassword"
@identity.save
Run Code Online (Sandbox Code Playgroud)

在omniauth-identity的问题中,wdspkr说:

一旦您了解omniauth-identity使用ActiveModel的SecurePassword,就可以很容易地解决这个问题.您只需设置password和password_confirmation并更新,而不是设置password_digest.


siz*_*zle 3

事实证明事情就是这么简单。只需覆盖Identity表中现有的password_digest即可。使用 BCrypt 库创建password_digest:

require 'bcrypt'
...
class UsersController < ApplicationController
  ...
  def update
    @user = User.find(params[:id])
    ...
    user_identity = Identity.find_by_email(@user.email)
    unencrypted_password = params[:user][:password].to_s
    password_digest = BCrypt::Password.create(unencrypted_password)
    user_identity.password_digest = password_digest;
    user_identity.save!
  end
end
Run Code Online (Sandbox Code Playgroud)