2014-11-20 2 views
0

새 암호를 설정할 때마다 유효하지 않은 토큰 오류 메시지가 나타납니다. Devise, reset_password_token = Devise.token_generator.digest (self, : reset_password_token, params [: reset_token])에서이 메소드를 디버깅했으며 토큰은 실제로 데이터베이스에 저장된 것과 다릅니다. 토큰이 다른 이유를 아는 사람이 있습니까?Rail 4 Devise 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

+0

@Hoa 컨트롤러 코드에 대한 내 게시물을 편집했습니다. –

답변

0

문제는 첫 번째 매개 변수는 역할 모델 클래스해야

다음 줄 함께 귀하의 사용자 모델로. 현재 PasswordsController 클래스를 전달합니다. 당신은 또한 사용자 모델 User 이름을 경우 당신은 reset_password_period_valid?를 확인해야

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

에 그 줄을 변경 :

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 

당신이로 업데이트를 시도하지 않는 토큰 오류가 리소스에 추가되지 않습니다 만료 토큰.

관련 문제