2013-03-13 3 views
2

Я пытаюсь убедиться, что новый пароль пользователя при сбросе не равен текущему, но я столкнулся с небольшой проблемой здесь.
После ссылки, отправленной на электронный бла л, у меня есть форма сброса отправить запрос на запись к этому методуПроверка пароля восстановления в rails

def password_reset 
     @user = UserVerificationToken.token_valid(params[:format]) 
     new_pass = params[:user][:password] 
     if User.unique_reset_password(new_pass) 
      redirect_to recover_password_path :notice => "You need to choose a different password" 
     elsif @user.update_attributes(password: new_pass) 
      redirect_to root_url, :notice => "Password has been reset" 
     else 
      redirect_to recover_password_path 
     end 

    end 

И в модели пользователя у меня есть этот метод.

def self.unique_reset_password(new_pass) 
    return true unless :password == new_pass 
end 

После 10 минут попытки выяснить, почему это не работает, я ударил себя. Duh, new_pass еще не хэширован.
Мой вопрос в том, как я могу это сделать, я на правильном пути? есть ли в любом случае хэш new_pass, прежде чем сравнивать его с текущим хэшированием? Спасибо.

ответ

2

Try через authenticate метод:

@user = UserVerificationToken.token_valid(params[:format]) 
new_pass = params[:user][:password] 
if @user.authenticate(new_pass) 
    #no good, same as old 
    else 
    #continue 
end 

Это метод, который используется при входе в системе (не 100% уверен, но он используется в моем приложении, построенном с помощью RoR Twitter учебника)

+0

спасибо не думает из этого, я попробую это сейчас. – Skyalchemist

+0

О, вау, спасибо, не собираюсь лежать, я не ожидал, что это сработает. спасибо большое haha ​​ – Skyalchemist

+0

вы могли бы связать меня с учебником ror twitter? – Skyalchemist

Смежные вопросы