質問編集履歴
6
その後試した内容を追記欄に記載致しました。
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
追記の欄を追加致しました。
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
タイトルをより明確にいたしました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ログインに成功してもセッションIDが付与されな
|
1
|
+
ローカル環境でのみ、ログインに成功してもセッションIDが付与されない。
|
test
CHANGED
File without changes
|
3
質問文全体を新しく編集し直しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
ログインに成功してもセッションIDが付与されなくなった。
|
test
CHANGED
@@ -1,11 +1,35 @@
|
|
1
|
+
**数日前に質問を投稿してから進展があり、当初記述しておりました内容とは論点(原因)が異なる事が分かりましたので、質問文全体を新しく編集し直しました。**
|
2
|
+
|
3
|
+
|
4
|
+
|
1
|
-
###
|
5
|
+
### 背景
|
2
|
-
|
3
|
-
|
4
|
-
|
6
|
+
|
7
|
+
|
8
|
+
|
5
|
-
コードをいじっていないにも関わらず、実装出来ていたログ
|
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
|
-
|
60
|
+
|
22
|
-
|
23
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
297
|
+
左下の「Request」内に`Cookie`が、また右下の「Response」内に`Set-cookie`がそれぞれ出てきません。
|
252
|
-
|
253
|
-
|
298
|
+
|
254
|
-
|
255
|
-
|
299
|
+
|
256
|
-
|
300
|
+
|
257
|
-
|
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
|
-
|
310
|
+
|
334
|
-
|
335
|
-
```
|
336
|
-
|
337
|
-
|
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をそれぞれ追記致しました。
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
セッションに関する内容を追記いたしました。
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
|
|