1

単純なユーザー認証を実行しようとしていますがDigest::SHA1::hexdigest、セッションコントローラーでの呼び出しにより、ユーザーモデルのハッシュとは異なるハッシュが生成されます。

user.rb:

    class User < ActiveRecord::Base

    before_save {|user| user.password = Digest::SHA1.hexdigest(user.password)}
    ...

    end

session_controller.rb

    def create
        user = User.where(:username => params[:username], :password => Digest::SHA1.hexdigest(params[:password])).first
    end

これを修正する方法はありますか?

たとえば、ログインしようとすると、文字列「password」は「5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8」と表示されます。

ただし、データベースでは、同じ文字列「password」は「353e8061f2befecb6818ba0c034c632fb0bcae1b」と表示されます。

4

1 に答える 1

3

before_saveは保存するたびに実行されるため、暗号化を作成してから、暗号化する更新(すでに暗号化されているもの)を再度実行します。before_createを使用してみてください。

于 2012-06-19T20:02:04.780 に答える