2012-04-02 194 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和 更新。