0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

rails5 progate 整理メモ password_digest

Posted at

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]で入力されたパスワードとされる文字列が一致するか判断する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?