2013-03-13 71 views
2

我试图确保用户的重置新密码不等于当前的密码,但我遇到了一个小问题。
发送到电子邮件喇嘛喇嘛的确认链接后,我有复位形式发送POST请求该方法在导轨中验证重置密码

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

尝试通过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的微博教程建成使用)

+0

多亏没想到的方法那我现在就试试看。 – Skyalchemist 2013-03-13 23:28:53

+0

哦哇谢谢,不会说谎我没想到会工作。非常感谢哈哈 – Skyalchemist 2013-03-13 23:31:55

+0

你能把我链接到ror twitter教程吗? – Skyalchemist 2013-03-13 23:32:40