質問編集履歴

3

sessions_helper.rbを追加、リスト30の $ rails testでパスするはずがエラーになっています。

2025/01/04 10:40

投稿

12a1070
12a1070

スコア1

test CHANGED
File without changes
test CHANGED
@@ -317,7 +317,8 @@
317
317
  @current_user = user
318
318
  end
319
319
 
320
- 修正箇所がないように見えます
320
+ 修正箇所がないように見えます
321
+ sessions_helper_test.rbを追記しました。リスト 11.30のrails testでgreenになるはずがエラーによってRedの状態です。
321
322
 
322
323
  ### 補足
323
324
  Rails 7.0.8.4

2

書き忘れていたsessions_helper_test.rb のコードを追記しました。エラー内容は同じです。

2025/01/04 10:32

投稿

12a1070
12a1070

スコア1

test CHANGED
File without changes
test CHANGED
@@ -244,6 +244,44 @@
244
244
  end
245
245
 
246
246
  ```
247
+ ※追加したsessions_helper_test.rb
248
+ ```Ruby
249
+
250
+ require "test_helper"
251
+
252
+ class SessionsHelperTest < ActionView::TestCase
253
+
254
+ def setup
255
+ @user = users(:michael)
256
+ remember(@user)
257
+ end
258
+
259
+ test "current_user returns right user when session is nil" do
260
+ assert_equal @user, current_user
261
+ assert is_logged_in?
262
+ end
263
+
264
+ test "current_user returns nil when remember digest is wrong" do
265
+ @user.update_attribute(:remember_digest, User.digest(User.new_token))
266
+ assert_nil current_user
267
+ end
268
+
269
+ # 記憶トークンcookieに対応するユーザーを返す
270
+ def current_user
271
+ if (user_id = session[:user_id])
272
+ @current_user ||= User.find_by(id: user_id)
273
+ elsif (user_id = cookies.encrypted[:user_id])
274
+ user = User.find_by(id: user_id)
275
+ if user && user.authenticated?(cookies[:remember_token])
276
+ log_in user
277
+ @current_user = user
278
+ end
279
+ end
280
+ end
281
+
282
+ end
283
+
284
+ ```
247
285
 
248
286
  ### 試したこと・調べたこと
249
287
  - [x] teratailやGoogle等で検索した

1

Railsチュートリアルで黄色の追加、編集部分への補足説明を追加。

2025/01/04 05:48

投稿

12a1070
12a1070

スコア1

test CHANGED
File without changes
test CHANGED
@@ -65,7 +65,7 @@
65
65
  remember_digest || remember
66
66
  end
67
67
 
68
- # 渡されたトークンがダイジェストと一致したらtrueを返す
68
+ # 渡されたトークンがダイジェストと一致したらtrueを返す(追加した部分です)
69
69
  def authenticated?(attribute, token)
70
70
  digest = send("#{attribute}_digest")
71
71
  return false if digest.nil?
@@ -124,7 +124,7 @@
124
124
  @current_user ||= user if session[:session_token] == user.session_token
125
125
  elsif (user_id = cookies.encrypted[:user_id])
126
126
  user = User.find_by(id: user_id)
127
- if user && user.authenticated?(:remember, cookies[:remember_token])
127
+ if user && user.authenticated?(:remember, cookies[:remember_token]) ⇦追加したコードです
128
128
  log_in user
129
129
  @current_user = user
130
130
  end
@@ -238,7 +238,7 @@
238
238
  assert_not @user.valid?
239
239
  end
240
240
 
241
- test "authenticated? should return false for a user with nil digest" do
241
+ test "authenticated? should return false for a user with nil digest" do ⇦追加した部分です。
242
242
  assert_not @user.authenticated?(:remember, '')
243
243
  end
244
244
  end