LoginSignup
0
0

流れ

1. Userのモデルとコントローラーを準備する

rails g model user username:string password_digest:string
rails g controller users
rails db:migrate 

以下のファイルが生成されます:
image.png

users_controller.rb

image.png
user.rb

user.rb に以下のメソッドを追加します:

class User < ApplicationRecord
  has_secure_password
end

2. Gemfileにgemパッケージを追加する

gem 'bcrypt'

ターミナルで次のコマンドを入力します:

bundle install

3. Railsのインタラクティブコマンドラインに入る

ターミナルで次のコマンドを入力します:

rails console

ユーザーを作成します:

User.create(username: "suzuki", password: "password123")

ターミナルに以下の出力が表示されます:

  TRANSACTION (0.1ms)  begin transaction
User Create (0.5ms)  INSERT INTO "users" ("username", "password_digest", "created_at", "updated_at") VALUES (?, ?, ?, ?) RETURNING "id"  [["username", "suzuki"], ["password_digest", "[FILTERED]"], ["created_at", "2024-06-26 01:18:17.472828"], ["updated_at", "2024-06-26 01:18:17.472828"]]
TRANSACTION (0.1ms)  commit transaction
=>
#<User:0x000000010c894a38
id: 1,
username: "suzuki",
password_digest: "[FILTERED]",
created_at: Wed, 26 Jun 2024 01:18:17.472828000 UTC +00:00,
updated_at: Wed, 26 Jun 2024 01:18:17.472828000 UTC +00:00>

これで、パスワードが暗号化されて保存されました。

问题

質問1:なぜデータベースのusersテーブルのパスワードフィールドはpassword_digestですが、ユーザーを作成する際にはpasswordを渡すのでしょうか?

has_secure_password はRailsの内蔵メソッドで、ユーザーパスワードの暗号化と検証を便利に行うための方法を提供します。具体的には、以下のことを行います:

  1. 属性処理:モデルに has_secure_password を使用すると、自動的に仮想属性 password が追加されます。この属性はデータベースに保存されません。
    password 属性に値を設定すると、has_secure_password はbcryptを使用してパスワードを暗号化し、暗号化された結果をデータベースの password_digest フィールドに保存します。
  2. 検証:has_secure_password は、モデルに authenticate メソッドを追加します。このメソッドは、ユーザーが提供したパスワードが password_digest に保存されているハッシュ値と一致するかどうかを検証します。また、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