0

私は、DataMapper と Sinatra、特に attr_encrypted を初めて使用します。私が望むのは、パスワードを暗号化して保存し、ユーザー名とパスワードでユーザーを検索できるようにすることです。attr_encrypted のドキュメントを読みましたが、まだ何をすべきかわかりません:(

これら2つのテクノロジーを使用したプロジェクトの例をいくつか挙げてください。または、コードを変更して機能させる方法を教えてください:(

私のユーザークラス:

  class User
    include DataMapper::Resource

    attr_encryptor :password, :key => 'secret key'

    property :id,       Serial
    property :encrypted_password, Text
  end

ユーザーを保存するときは、次のようにします。

  username = params[:username]
  password = params[:password]
  user = User.new(:username => username, :encrypted_password => password)
  user.save

暗号化されたパスワードではなく、元のパスワードを保存しています。

そして、パスワードが暗号化されているときにユーザーを検索する方法がわかりません:(

今、それは次のようなものです:

  @user = User.all(:username => username, :password => password)

初心者の質問で申し訳ありませんが、私はそれを完全に理解することはできません:(

事前にどうもありがとうございました!

4

2 に答える 2

1

Data Mapper のプロパティを指定したattr_encryptor、行を追加する必要があります。これにより、DataMapper が単にアクセサーを独自のものに置き換えるのを防ぎます。encrypted_password

class User
  include DataMapper::Resource

  property :id,       Serial
  property :encrypted_password, Text

  # this line moved down from above
  attr_encryptor :password, :key => 'secret key'
end

次に、次を使用してユーザーを作成します。

user = User.new(:username => username, :password => password)

暗号化されたパスワードに基づいてユーザーを検索しますか? 通常、たとえばユーザー名に基づいてユーザーを検索し、パスワードの一致を確認します。

これを行いたい場合は、コードで暗号化されたパスワードを再作成し、それを検索する必要があります (暗号化がどのように行われるかを確認するには、ドキュメントを確認する必要があります)。

User.all(:username => username, :encrypted_password => encrypt(password))

または、一致するすべてのユーザーを取得し、コードでそれらをフィルター処理します。

User.all(:username => name).select {|u| u.password == password}
于 2014-02-03T21:34:19.163 に答える