2014-11-20 50 views
0

每當我設置一個新的密碼,我得到了一個無效的令牌錯誤消息。我在Devise調試了這個方法,reset_password_token = Devise.token_generator.digest(self,:reset_password_token,params [:reset_token]),並且令牌確實不同於保存在數據庫中的令牌。在這裏做任何一個人,或知道爲什麼令牌不同?鐵路4設計3.2忘記密​​碼令牌無效

編輯:下面是我用它來重寫設計:: PasswordController控制器代碼

class PasswordsController < Devise::PasswordsController 

def edit 
    original_token  = params[:reset_password_token] 
    reset_password_token = Devise.token_generator.digest(self, :reset_password_token, original_token) 
    self.resource = resource_class.find_or_initialize_with_error_by(:reset_password_token, reset_password_token) 
    if !resource.errors.empty? 
    flash[:alert] = "Password token is invalid" 
    redirect_to new_session_path(resource_name) 
    end 
    end 
end 
+0

請將控制器代碼發佈到您用新密碼更新密碼的地方。 – Hoa 2014-11-21 03:51:53

+0

@Hoa我編輯了我的控制器代碼的文章。 – 2014-11-21 07:45:22

回答

0

問題是與以下行

第一個參數應該是作用於模型類作爲你的用戶模型。目前,您傳遞PasswordsController類。如果您還命名您的用戶模型User則該行變爲

Devise.token_generator.digest(User, :reset_password_token, original_token) 
0

您需要檢查reset_password_period_valid?

if resource.reset_password_period_valid? 
    set_minimum_password_length 
    resource.reset_password_token = params[:reset_password_token] 
else 
    flash[:alert] = 'Your password reset link has expired, please enter your email to send a new one.' 
    redirect_to new_password_path(resource_name) 
end 

過期的,除非你試圖通過更新令牌誤差不會添加到資源令牌。