Userモデルを作る
Database設計
意味 | Column | Type | Options |
---|---|---|---|
名前 | name | string | null: false |
メールアドレス | string | null: false, unique: true | |
パスワード | password_digest | string | null: false |
userモデルを作成する
ターミナル
$ rails g model user name:string email:string password_digest:string
invoke active_record
create db/migrate/xxxxxxxxxxxx_create_users.rb
create app/models/user.rb
migrationファイルの編集
db/migrate/xxxxxxxxx_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
t.string :name, null: false
t.string :email, null: false
t.string :password_digest, null: false
t.timestamps
t.index :email, unique: true
end
end
end
編集が完了したらrails db:migrate
をすること。
コンソールからUserモデルのオブジェクトを作ってみる
ターミナル
$ rails c
Running via Spring preloader in process 3745
Loading development environment (Rails 5.2.3)
[1] pry(main)> user = User.create(name: "匿名", email: "user@example.com", password_digest: "digest"[1] pry(main)> user = User.create(name: "匿名", email: "user@example.com", password_digest: "digest")
(0.2ms) BEGIN
User Create (25.6ms) INSERT INTO "users" ("name", "email", "password_digest", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["name", "匿名"], ["email", "user@example.com"], ["password_digest", "digest"], ["created_at", "2019-11-13 06:37:41.060780"], ["updated_at", "2019-11-13 06:37:41.060780"]]
(12.2ms) COMMIT
=> #<User:0x00007face35fd128
id: 1,
name: "匿名",
email: "user@example.com",
password_digest: "digest",
created_at: Wed, 13 Nov 2019 06:37:41 UTC +00:00,
updated_at: Wed, 13 Nov 2019 06:37:41 UTC +00:00>
[2] pry(main)> user.password_digest
=> "digest"
[3] pry(main)>
上記のようにきちんと保存できてたらOK。
パスワードを受け付けてdigestを保存する
gemのbcryptを導入
Gemfile
# 〜省略〜
gem 'bcrypt', '~> 3.1.7' # コメントアウトを解除
# 〜省略〜
bundle install
をする。
これでbcryptがインストールできたので、Userモデル内でhas_secure_passwordが使える。
User.rbの編集
user.rb
class User < ApplicationRecord
has_secure_password
end
上記のようにhas_secure_password
を記述するとデータベースには対応しない属性が2つ追加される。
1つ目はpassword
であり、2つ目はpassword_confirmation
である。
再度コンソールでUserオブジェクトを作り、確認してみる
ターミナル
$ rails c
Running via Spring preloader in process 4214
Loading development environment (Rails 5.2.3)
[1] pry(main)> User.new(name: 'ユーザー', email: 'sample@example.com', password: 'password', password_confirmation: 'password').save
無事に登録できたら、password_digest属性にどのような値が入っているか確認してみる。
ターミナル
> user.password_digest
=> "$2a$12$LLD1gCo75.pc3//VwSXECe7lLJJsIuMsT0SKFozfCxVMtW8ogaZ.a"
上記のようになればきちんとハッシュ化されていることになる。
has_secure_password
は、パスワードのハッシュ化だけではなく、認証のための機能も追加してくれる。