teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

app/model/user.rb ファイルの中身の追加

2020/04/18 05:46

投稿

jasonwick
jasonwick

スコア12

title CHANGED
File without changes
body CHANGED
@@ -5,4 +5,46 @@
5
5
  ![イメージ説明](eb9c90a435dcc9ff30fba1ca904d1279.jpeg)
6
6
 
7
7
  ブラウザの方でもログアウトを試みたところ以下のようなエラーが発生し、forgetメソッドに原因があると考えていますが、解決策を提案頂けると幸いです。
8
- ![イメージ説明](98a5422e2889b44c58bf9d3ed9ebb3b3.jpeg)
8
+ ![イメージ説明](98a5422e2889b44c58bf9d3ed9ebb3b3.jpeg)
9
+
10
+ ### 追記 app/model/user.rb ファイルの中身
11
+
12
+ ```ここに言語を入力
13
+ class User < ApplicationRecord
14
+ attr_accessor :remember_token
15
+ before_save { self.email = email.downcase }
16
+ validates :name, presence: true, length: { maximum: 50 }
17
+ VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(.[a-z\d\-]+)*.[a-z]+\z/i
18
+ validates :email, presence: true, length: { maximum: 255 },
19
+ format: { with: VALID_EMAIL_REGEX },
20
+ uniqueness: { case_sensitive: false }
21
+ has_secure_password
22
+ validates :password, presence: true, length: { minimum: 6 }
23
+
24
+ # 渡された文字列のハッシュ値を返す
25
+ def User.digest(string)
26
+ cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
27
+ BCrypt::Engine.cost
28
+ BCrypt::Password.create(string, cost: cost)
29
+ end
30
+
31
+ # ランダムなトークンを返す
32
+ def User.new_token
33
+ SecureRandom.urlsafe_base64
34
+ end
35
+
36
+ # 永続セッションのためにユーザーをデータベースに記憶する
37
+ def remember
38
+ self.remember_token = User.new_token
39
+ update_attribute(:remember_digest, User.digest(remember_token))
40
+ end
41
+
42
+ # 渡されたトークンがダイジェストと一致したらtrueを返す
43
+ def authenticated?(remember_token)
44
+ return false if remember_digest.nil?
45
+ BCrypt::Password.new(remember_digest).is_password?(remember_token)
46
+ end
47
+
48
+
49
+ end
50
+ ```