回答編集履歴

1

rememberメソッド の変更を追記

2020/12/19 09:51

投稿

outmysd
outmysd

スコア3

test CHANGED
@@ -99,3 +99,109 @@
99
99
  end
100
100
 
101
101
  ```
102
+
103
+
104
+
105
+ ※追記 再びエラーが出たので、app/models/user.rbのrememberメソッドを書き換えてgreenにしました。
106
+
107
+ ```
108
+
109
+ class User < ApplicationRecord
110
+
111
+ attr_accessor :remember_token
112
+
113
+ before_save { self.email = email.downcase }
114
+
115
+ validates :name, presence: true, length: { maximum: 50 }
116
+
117
+ VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i
118
+
119
+ validates :email, presence: true, length: { maximum: 255 },
120
+
121
+ format: { with: VALID_EMAIL_REGEX },
122
+
123
+ uniqueness: true
124
+
125
+ has_secure_password
126
+
127
+ validates :password, presence: true, length: { minimum: 6 }
128
+
129
+
130
+
131
+ # 渡された文字列のハッシュ値を返す
132
+
133
+ def User.digest(string)
134
+
135
+ cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
136
+
137
+ BCrypt::Engine.cost
138
+
139
+ BCrypt::Password.create(string, cost: cost)
140
+
141
+ end
142
+
143
+
144
+
145
+ # ランダムなトークンを返す
146
+
147
+ def User.new_token
148
+
149
+ SecureRandom.urlsafe_base64
150
+
151
+ end
152
+
153
+
154
+
155
+ # 永続セッションのためにユーザーをデータベースに記憶する
156
+
157
+ def remember
158
+
159
+ self.remember_token = User.new_token
160
+
161
+ update_attribute(:remember_digest, User.digest(:remember_token))
162
+
163
+ end
164
+
165
+
166
+
167
+ # 渡されたトークンがダイジェストと一致したらtrueを返す
168
+
169
+ def authenticated?(remember_token)
170
+
171
+ return false if remember_digest.nil?
172
+
173
+ BCrypt::Password.new(remember_digest).is_password?(remember_token)
174
+
175
+ end
176
+
177
+
178
+
179
+ # ユーザーのログイン情報を破棄する
180
+
181
+ def forget
182
+
183
+ update_attribute(:remember_digest, nil)
184
+
185
+ end
186
+
187
+ end
188
+
189
+ ```
190
+
191
+
192
+
193
+ 下記にあるコードが以前のrememberメソッドです
194
+
195
+ remember_tokenをシンボルにし忘れていました。
196
+
197
+ ```
198
+
199
+ def remember
200
+
201
+ self.remember_token = User.new_token
202
+
203
+ update_attribute(:remember_digest, User.digest(remember_token))
204
+
205
+ end
206
+
207
+ ```