セキュアなパスワードを追加するセキュアなパスワード!超大切!!パスワードをそのままの形ではなく、ハッシュ化してDBに保存するユーザーの認証は、パスワードの送信、ハッシュ化、データベース内のハッシュ化された値との比較、という手順で進んでいきます。比較の結果が一致すれば、送信されたパスワードは正しいと認識され、そのユーザーは認証されます。ここで、生のパスワードではなく、ハッシュ化されたパスワード同士を比較していることに注目してください。することで、生のパスワードをデータベースに保存するという危険なことをしなくてもユーザーを認証できます。これで、仮にデータベースの内容が盗まれたり覗き見されるようなことがあっても、パスワードの安全性が保たれます。・has_secure_passwordendセキュアにハッシュ化したパスワードを、データベース内のpassword_digestという属性に保存できるようになる。存在性と値が一致するかどうかのバリデーションも追加される。(引数の文字列がパスワードと一致するとUserオブジェクトを、間違っているとfalseを返すメソッド)。ユーザーがセキュアなパスワードを持っている現状テストは成功しないテストが失敗する理由は、6.3.1で触れたようにhas_secure_passwordには、仮想的なpassword属性とpassword_confirmation属性に対してバリデーションをする機能も(強制的に)追加されているからです。変数にこのような値がセットされておりません。"foobar")end演習この時点では、userオブジェクトに有効な名前とメールアドレスを与えても、valid?で失敗してしまうことを確認してみてください。エラーメッセージを確認してみてください。パスワードの最小文字数パスワードを簡単に割り出されないようにする為にもパスワードの最小文字数を設定しておく方が良い(滅茶苦茶長くされても困るから最大も設定して○文字から○文字ってするのがいいよね?)(などなどのアレンジを番外編的にやりましょうそうしましょう)ひとまず、パスワードが空ではない・6文字以上であるの2つを設定する。5@user.passwordと@user.password_confirmationに対して同時に代入をしている最小文字数と存在性のバリデーションを追加has_secure_passwordメソッドは存在性のバリデーションもしてくれるのですが、これは新しくレコードが追加されたときだけに適用される性質を持っています。いった文字列をパスワード欄に入力して更新しようとすると、バリデーションが適用されずに更新されてしまう問題が発生してしまうのです。有効な名前とメールアドレスでも、パスワードが短すぎるとuserオブジェクトが有効にならないことを確認してみましょう。"$2a$10$OxReO8cIWEMHyFKqrSO3s.v0YEFSVJPlY3ceHjsUW./ORgyZVh0wW"Userオブジェクトを作成した際のpassword”foobar”がハッシュ化されているまた6.3.1で説明したように、has_secure_passwordをUserモデルに追加したことで、そのオブジェクト内でauthenticateメソッドが使えるようになっています。ハッシュ化した値と、データベース内にあるpassword_digestカラムの値を比較します。(userオブジェクトを消去して)、このセクションで作ったuserオブジェクトを検索してみてください。オブジェクトが検索できたら、名前を新しい文字列に置き換え、saveメソッドで更新してみてください。うまくいきませんね...、なぜうまくいかなかったのでしょうか?今度は6.1.5で紹介したテクニックを使って、userの名前を更新してみてください。本文ママまとめとか感想Userモデルを作ってname・email・passwordの各属性やバリデーションの追加。パスワードをセキュアに認証できる機能の実装。次はちょっと寄り道して、パスワードのバリデーションをアレンジしてみるの巻き。らくだ🐫にもできるRailsチュートリアルとは「ド」が付く素人のらくだ🐫が勉強するRailsチュートリアルの学習記録です。自分用に記録していますが、お役に立つことがあれば幸いです。調べたとはいえらくだ🐫なりの解釈や説明が含まれます。間違っている部分もあるかと思います。検索:NEWS2019.05.09らくだにもできるRailsチュートリアルのまとめのページを作りました。Reserved.プライバシーポリシ。