passwordカラムとpassword_digestカラム
passwordカラムを消して、password_digestを追加しても今までのコードを書き換える必要はない
[1] pry(main)> user = User.find_by(id: 1)
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
=> #<User:0x0000557002159a88
id: 1,
name: "にんじゃわんこ",
email: "wanko@prog-8.com",
created_at: Tue, 18 Apr 2017 17:06:52 JST +09:00,
updated_at: Tue, 18 Apr 2017 17:06:52 JST +09:00,
image_name: "default_user.jpg",
password_digest: nil>
[2] pry(main)> user.password = "ninjawanko"
=> "ninjawanko"
[3] pry(main)> user.password_digest
=> "$2a$10$u6vPLYIpgUDJUNduRr0RJe69OPDLhKlVeBs60uY/K4pU3ZeoCTxR2"
[4] pry(main)> user.save
(0.1ms) begin transaction
User Exists (0.1ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = ? AND ("users"."id" != ?) LIMIT ? [["email", "wanko@prog-8.com"], ["id", 1], ["LIMIT", 1]]
SQL (0.2ms) UPDATE "users" SET "updated_at" = ?, "password_digest" = ? WHERE "users"."id" = ? [["updated_at", "2022-05-18 15:44:11.041719"], ["password_digest", "$2a$10$u6vPLYIpgUDJUNduRr0RJe69OPDLhKlVeBs60uY/K4pU3ZeoCTxR2"], ["id", 1]]
(4.1ms) commit transaction
=> true
思ったこと
user.password_digest
でパスワードはハッシュ化されるのか。
ハッシュ化されたパスワードを用いたログイン
フォームに入力されるメールアドレスを基にユーザーを取得する。
フォームに入力されたパスワードと取得したユーザーのパスワードが一致するか判断する。
authenticateメソッド
has_secure_passwordメソッドを有効にすると、authenticateメソッドを使えるようになります。
どのようなメソッドか?
authenticateメソッドは渡された引数をハッシュ化し、password_digestの値と一致するかどうかを判定する
実際やってみる。
users_controller.rb
.
.
.
@user = User.find_by(email: params[:email])
# if文の条件を&&とauthenticateメソッドを用いて書き換えてください
if @user && @user.authenticate(email: params[:email])
.
.
.
これでどうだろうか?
if @user && @user.authenticate(email: params[:email])
ここの部分が間違っているような気がする。
if @user && @user.authenticate(params[:password])
email
の部分が間違っていた。
インスタンス変数の持つpassword属性とparams[:password]で入力されたパスワードとされる文字列が一致するか判断する。