2

我试图确保用户在重置时的新密码不等于当前密码,但我在这里遇到了一个小问题。
在将确认链接发送到电子邮件 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 分钟后,我打了自己一巴掌。呃,new_pass 还没有散列。
我的问题是,我该怎么做,我在正确的道路上吗?在将 new_pass 与当前散列通行证进行比较之前,是否有散列它的方法?谢谢。

4

1 回答 1

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 教程构建的应用程序)

于 2013-03-13T23:14:06.553 回答