2012-04-02 151 views
6

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

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

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

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

回答

4

事实证明这很简单。只需覆盖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 
10

这样做:

@identity = Identity.find(1) 
@identity.password = "newpassword" 
@identity.password_confirmation = "newpassword" 
@identity.save 

在omniauth身份的issuewdspkr说:

一旦你明白omniauth身份是使用ActiveModel的 SecurePassword它很容易解决这个问题。而不是设置password_digest 您只需设置密码和password_confirmation和 更新。