在rails中验证重置密码

时间:2013-03-13 23:07:33

标签: ruby-on-rails ruby-on-rails-3 authentication

我正在尝试确保用户在重置时的新密码不等于当前的密码,但我在这里遇到了一个小问题。
在确认链接发送到电子邮件bla bla后,我有重置表单发送一个帖子请求到这个方法

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与当前的散列传递进行比较之前对其进行散列? 感谢。

1 个答案:

答案 0 :(得分: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 Twitter教程构建的应用程序中使用它)