現在、参考書やネットなどを参考にしながらWebサイトを作っている初心者です。Railsでcustomerモデルを作りました。
次にマイグレーションで t.string :hashed_password でパスワードのカラムを作りました。
次に app/models/customer.rb に下記コードを追加しました。(参考書に書いてあるとおり)
def password=(val)
if val.present?
self.hashed_password = BDrypt::Password.create(val)
end
password = val
end
そこで疑問に思ったのが次の項目です。ログインするときに、ユーザーネームとパスワードを入力するようにしようと考えています。
1,パスワードは暗号化されて、hasshed_password属性に入るとありましたが、入力されたpasswordが同じでも
暗号化されたパスワードは違う値で暗号化されるのでしょうか?
たとえば Aさんのパスワードが abcde と入力され登録されたとします。
つぎに Bさんもパスワードを abcde と入力してきた場合です。
この場合、2つのパスワード abcde は違う値で暗号化されデータベースに保存されるのかどうかです。
2,上の質問が、同じ値として認識された場合は 下記のように同じ値を受け付けないようにするのでしょうか?
add_index :customers, hashed_password, unique: true
のようにunique: trueをインデックスと一緒に記述すればBさんは abcd とパスワードを入力したときに
「このパスワードはすでに使用されております。」というようなエラーを出すことは出来るのでしょうか?
3,*ユーザーネームは以下のように記述しておりますが間違っていないか不安です。
add_index :customers, name, unique: true
自分ではインデックスをつけて、重複禁止としているつもりです。
4,それともバリデーションで下記のようにした方がいいのでしょうか?
validates :name, uniqueness: {case_sensitive: false}
validates :hashed_password, uniqueness: {case_sensitive: false}
ややこしい質問の仕方で申し訳ございませんがどなたか宜しくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/27 21:01