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 に答える