質問編集履歴

6

その後試した内容を追記欄に記載致しました。

2021/08/30 09:20

投稿

punchan36
punchan36

スコア105

test CHANGED
File without changes
test CHANGED
@@ -334,4 +334,44 @@
334
334
 
335
335
 
336
336
 
337
+ 以下の作業を試みましたが、依然として結果は同じでした。
338
+
339
+
340
+
337
- `rails s`をする際のポートを3000から3001に変えても結果は同じでした
341
+ - `rails s`をする際のポートを3000から3001に変え
342
+
343
+ - コマンドにて`bundle exec rake tmp:cache:clear`を実行。
344
+
345
+ - コマンドにて`rails tmp:clear`を実行。
346
+
347
+ - `users_controller.rb`の`login_form`内にて、以下の様にセッションの履歴を執拗に消す。
348
+
349
+
350
+
351
+ ```
352
+
353
+ def login_form
354
+
355
+ reset_session
356
+
357
+ session[:user_id] = nil
358
+
359
+ session.delete(:user_id)
360
+
361
+ end
362
+
363
+ ```
364
+
365
+
366
+
367
+ また外部から私のlocalhostに接続した場合はなぜか上手くいく為、直接localhostに接続した場合との違いを考えてみました。
368
+
369
+ ローカル環境から直接localhostに接続した場合は、このようにURL横がビックリマークの表示になります。
370
+
371
+ ![イメージ説明](c0a5db1c0a098e7513f8e72aa3112a51.png)
372
+
373
+ 一方で外部から私のlocalhostに接続した場合は鍵マークになっています。
374
+
375
+ ![イメージ説明](b848c1b69cc40345d5e66baeb6d6f8d5.png)
376
+
377
+ ページがSSL化されているかどうかでセッションIDが付与されないなどの違いが出てくるものなのでしょうか…。

5

追記の欄を追加致しました。

2021/08/30 09:20

投稿

punchan36
punchan36

スコア105

test CHANGED
File without changes
test CHANGED
@@ -327,3 +327,11 @@
327
327
  Rails 5.2.3
328
328
 
329
329
  Burp Suite Community Edition 2021.8.2
330
+
331
+
332
+
333
+ ### 追記
334
+
335
+
336
+
337
+ `rails s`をする際のポートを3000から3001に変えても結果は同じでした。

4

タイトルをより明確にいたしました。

2021/08/29 10:58

投稿

punchan36
punchan36

スコア105

test CHANGED
@@ -1 +1 @@
1
- ログインに成功してもセッションIDが付与されなくなった
1
+ ーカル環境でのみ、ログインに成功してもセッションIDが付与されな
test CHANGED
File without changes

3

質問文全体を新しく編集し直しました。

2021/08/27 07:24

投稿

punchan36
punchan36

スコア105

test CHANGED
@@ -1 +1 @@
1
- 突然ログインが出来なくなった。Filter chain halted as :authenticate_user rendered or redirected
1
+ ログインに成功してもセッションID付与されなくなった。
test CHANGED
@@ -1,11 +1,35 @@
1
+ **数日前に質問を投稿してから進展があり、当初記述しておりました内容とは論点(原因)が異なる事が分かりましたので、質問文全体を新しく編集し直しました。**
2
+
3
+
4
+
1
- ### 前提・実現したいこと
5
+ ### 背景
2
-
3
-
4
-
6
+
7
+
8
+
5
- コードをいじっていないにも関わらず、実装出来ていたログアウト機能が使えなくなりました。尚、deviseは使用しておりせん
9
+ コードをいじっていないにも関わらず、実装出来ていたログイン機能が使えなくなりました。ログイン画面で正いメールアドレス・パスワードを入力しも再度ログイン画面にリダイレクトされてしうと言った状況です
10
+
11
+ 尚、deviseは使用しておりません。
12
+
13
+
14
+
15
+ ログイン周りのコードに問題があるのかとまず考えましたが、ログを辿るとログインが成功した際のコードに分岐されている事が分かりました。
16
+
17
+
18
+
19
+ また`Burp Suite`と言う「ブラウザ - サーバー間(ローカルプロキシ)」の通信の記録を観察するツールを使用し調べてみた所、ログイン後にセッションIDがなぜか付与されておらず、結果として`authenticate_user`に引っ掛かりログインが出来なくなっている状況だと分かりました。この原因を突き止め、解決したいです。
20
+
21
+
22
+
23
+ 更に`ngrok`と言う、`localhost`にhogehoge.ngrok.comで外部からアクセスできるツールを使い、外部からアクセスした場合に違いが生じるかを確認した所、何とこちらではログインに成功しました。その様子を同じように`Burp Suite`で調べた所、こちらではログイン後にセッションIDが付与されている様子が確認出来ました。
24
+
25
+
26
+
27
+ つまりローカル環境でログインを試みた際にのみ、なぜかセッションIDが付与されなくなっているようなのです。
6
28
 
7
29
  直近でコードに関して作業はしておらず、以下の作業をしておりました。
8
30
 
31
+
32
+
9
33
  - Gitの導入。
10
34
 
11
35
  - 作成した「アプリ1」を、Gitを使用しGitHubにプッシュ。
@@ -16,15 +40,29 @@
16
40
 
17
41
 
18
42
 
43
+ 更に前に作業していた事はと言えば、セッションに関して以下の1行加えた事くらいです。
44
+
45
+ またこの行は現在コメントアウトしておりますが、状況は変わりません。
46
+
47
+
48
+
49
+ **application.rb**
50
+
51
+ ```
52
+
53
+ config.session_store :cookie_store, expire_after: 8.hours
54
+
55
+ ```
56
+
57
+
58
+
19
- これらの作業が済んだ後、アプリをビューで使ってみました。
59
+ これらの作業が済んだ後、上記の問題が発生した次第です
20
-
21
- 新しい方の「アプリ2」を`rails s`すると、ログイン画面で正しいメールアドレス・パスワードを入力しても再度ログイン画面にリダイレクトされてしまいます。
60
+
22
-
23
- また古い方の「アプリ1」を`rails s`すると、先ほどログインを試したユーザーで既にログイン済みの状態になっており、ログアウトしようとしてもログアウトされず、トップページにリダイレクトされてしまいます。
61
+
24
-
25
-
26
-
62
+
63
+
64
+
27
- ### コード
65
+ ### 該当のソースコード
28
66
 
29
67
 
30
68
 
@@ -162,13 +200,17 @@
162
200
 
163
201
  ```
164
202
 
203
+ ログインに成功した場合は`redirect_to("/")`の様に、トップページに遷移するようにしています。
204
+
165
205
 
166
206
 
167
207
  ### ログ
168
208
 
169
209
 
170
210
 
171
- 新しい方の「アプリ2」でログインを試みた際のログです。
211
+ ログインを試みた際のログです。
212
+
213
+ `Started GET "/"`とある様に、ソースコード上ログインには成功しているようです。しかしその後`Filter chain halted as :authenticate_user rendered or redirected`と怒られ、`"/login"`にリダイレクトされています。
172
214
 
173
215
 
174
216
 
@@ -236,67 +278,27 @@
236
278
 
237
279
 
238
280
 
281
+ ### Burp Suitでの表示
282
+
283
+
284
+
285
+ `ngrok`を使用し、外部からアクセスしてからログインした際の記録。
286
+
287
+ 左下の「Request」内に`Cookie`が、また右下の「Response」内に`Set-cookie`がそれぞれ表示されています。
288
+
289
+
290
+
291
+ ![](de03a969ff7faa0ab13f233129c032fb.jpeg)
292
+
293
+
294
+
239
- 古い方の「アプリ1」でログアウトを試みた際のログです
295
+ ローカル環境でログインを試みた際の記録
240
-
241
-
242
-
243
- ```
296
+
244
-
245
- Started POST "/logout" for ::1 at 2021-08-24 14:10:23 +0900
246
-
247
- Processing by UsersController#logout as HTML
248
-
249
- Parameters: {"authenticity_token"=>"i4RfHq+MpbYqsVCvBUPfl/lMvkGv2kG39GtXcHkAvJheZSYKXFk54AOswmy9b7be8oELwcaqvy7ByziYfi28aA=="}
250
-
251
- User Load (3.1ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 8 LIMIT 1
297
+ 左下の「Request」内に`Cookie`が、また右下の「Response」内に`Set-cookie`がそれぞれ出てきません。
252
-
253
- ↳ app/controllers/application_controller.rb:9
298
+
254
-
255
- Redirected to http://localhost:3000/login
299
+
256
-
300
+
257
- Completed 302 Found in 7ms (ActiveRecord: 3.1ms)
301
+ ![](de0d0c09daa3afe18af079b7637f1703.jpeg)
258
-
259
-
260
-
261
-
262
-
263
- Started GET "/login" for ::1 at 2021-08-24 14:10:23 +0900
264
-
265
- Processing by UsersController#login_form as HTML
266
-
267
- User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 8 LIMIT 1
268
-
269
- ↳ app/controllers/application_controller.rb:9
270
-
271
- Redirected to http://localhost:3000/
272
-
273
- Filter chain halted as :forbid_login_user rendered or redirected
274
-
275
- Completed 302 Found in 4ms (ActiveRecord: 0.6ms)
276
-
277
-
278
-
279
-
280
-
281
- // ログアウトが上手くいかず、トップページにリダイレクトされ、ここからトップページを表示する際にデータベースから引っ張ってきたユーザー情報等が延々と表示されます。
282
-
283
- Started GET "/" for ::1 at 2021-08-24 14:10:23 +0900
284
-
285
- Processing by UsersController#top as HTML
286
-
287
- User Load (0.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 8 LIMIT 1
288
-
289
- ↳ app/controllers/application_controller.rb:9
290
-
291
- User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IS NULL LIMIT 1
292
-
293
- ↳ app/controllers/users_controller.rb:346
294
-
295
- (2.3ms) SELECT `users`.`id` FROM `users` INNER JOIN `relationships` ON `users`.`id` = `relationships`.`following_id` WHERE `relationships`.`follower_id` = 8
296
-
297
- // 省略。
298
-
299
- ```
300
302
 
301
303
 
302
304
 
@@ -304,43 +306,13 @@
304
306
 
305
307
 
306
308
 
307
- ログの`Filter chain halted as :authenticate_user rendered or redirected`や`Filter chain halted as :forbid_login_user rendered or redirected`の部分が怪しいと思い、調べてみました。
308
-
309
-
310
-
311
- [同じようなログが出た方々](https://github.com/lynndylanhurley/devise_token_auth/issues/603)もいらっしゃるようなのですが、あまり明確な解決策が出ていない印象です。
312
-
313
- 以下の様にコントローラを編集する事で解決した方もいらっしゃる様なのですが、これまで問題なく上手くいっていたコードを闇雲に変えるのは避けたいのと、何より原因が分からない為前に進めていない状態です。
314
-
315
-
316
-
317
- ```
318
-
319
- before_action :authenticate_user! to
320
-
321
-
322
-
323
- before_filter :authenticate_user!, except: [:new, :create]
324
-
325
- ```
326
-
327
-
328
-
329
- もっと前に作業していた事はと言えば、セッションに関して1行加えたりした事くらいです。
330
-
331
- 行も今はトアウトしております。
309
+ サーバー再起動、パソコンの再起動を試しても状況は変わらず、
332
-
333
- **application.rb**
310
+
334
-
335
- ```
336
-
337
- config.session_store :cookie_store, expire_after: 8.hours
311
+ ブラウザによる違い(Google Chrome, Firefox, Braveで試しました)も関係ありませんでした。
338
-
339
- ```
312
+
340
-
341
-
342
-
313
+
314
+
343
- どなたかご助言を頂けますと有難いです。
315
+ サーバーやセッション関連に原因があるかもしれず、プログラミング関連の質問としてそぐわなくなっておりましたら申し訳ありません。どなたかご助言を頂けますと有難いです。
344
316
 
345
317
 
346
318
 
@@ -353,3 +325,5 @@
353
325
  RubyGems 3.0.3
354
326
 
355
327
  Rails 5.2.3
328
+
329
+ Burp Suite Community Edition 2021.8.2

2

application_controller.rbと、users_controller.rb内のbefore_actionをそれぞれ追記致しました。

2021/08/27 06:06

投稿

punchan36
punchan36

スコア105

test CHANGED
File without changes
test CHANGED
@@ -42,10 +42,80 @@
42
42
 
43
43
 
44
44
 
45
+ **application_controller.rb**
46
+
47
+ ```
48
+
49
+ class ApplicationController < ActionController::Base
50
+
51
+ protect_from_forgery with: :null_session
52
+
53
+ before_action :set_current_user
54
+
55
+ skip_before_action :verify_authenticity_token
56
+
57
+
58
+
59
+ caches_action :set_current_user, :authenticate_user, :forbid_login_user
60
+
61
+
62
+
63
+ def set_current_user
64
+
65
+ @current_user = User.find_by(id: session[:user_id])
66
+
67
+ end
68
+
69
+
70
+
71
+ def authenticate_user
72
+
73
+ if @current_user == nil
74
+
75
+ flash[:notice] = "You need to log in"
76
+
77
+ redirect_to("/login")
78
+
79
+ end
80
+
81
+ end
82
+
83
+
84
+
85
+ def forbid_login_user
86
+
87
+ if @current_user
88
+
89
+ flash[:notice] = "You are already logged in"
90
+
91
+ redirect_to("/")
92
+
93
+ end
94
+
95
+ end
96
+
97
+ end
98
+
99
+ ```
100
+
101
+
102
+
45
103
  **users_controller.rb**
46
104
 
47
105
  ```
48
106
 
107
+ before_action :authenticate_user, {except: [:new, :create, :login_form, :login]}
108
+
109
+ before_action :forbid_login_user, {only: [:new, :create, :login_form, :login]}
110
+
111
+ before_action :ensure_correct_user, {only: [:edit, :update]}
112
+
113
+ before_action :ensure_correct_user_account, {only: [:setting_password, :update_password, :setting_email, :update_email, :delete_account, :destroy]}
114
+
115
+ caches_action :index, :show, :follow, :new, :create, :edit, :user_params, :update, :destroy, :login_form, :login, :logout, :likes, :ensure_correct_user, :followings, :followers, :top
116
+
117
+
118
+
49
119
  def login
50
120
 
51
121
  @user = User.find_by(email: params[:email])

1

セッションに関する内容を追記いたしました。

2021/08/25 01:31

投稿

punchan36
punchan36

スコア105

test CHANGED
File without changes
test CHANGED
@@ -256,6 +256,20 @@
256
256
 
257
257
 
258
258
 
259
+ もっと前に作業していた事はと言えば、セッションに関して1行加えたりした事くらいです。
260
+
261
+ この行も今はコメントアウトしております。
262
+
263
+ **application.rb**
264
+
265
+ ```
266
+
267
+ config.session_store :cookie_store, expire_after: 8.hours
268
+
269
+ ```
270
+
271
+
272
+
259
273
  どなたかご助言を頂けますと有難いです。
260
274
 
261
275