質問編集履歴

5

追記(ほぼ解決)

2019/06/14 13:12

投稿

kazoogon
kazoogon

スコア281

test CHANGED
File without changes
test CHANGED
@@ -161,3 +161,21 @@
161
161
  ・送信完了後、戻ってreloadする場合には対応できる
162
162
 
163
163
  ・ダブルクリックされた場合は、メールが送られた後にエラー画面が表示されてしまう (JSでなくPHPの対応方法はあるか?)
164
+
165
+
166
+
167
+ 追記(ほぼ解決)
168
+
169
+ ---
170
+
171
+ 上記render関数一番下に下記コードを挿入(というか元々あったやつ)すると401のviewが表示された
172
+
173
+ ```
174
+
175
+ return parent::render($request, $exception);
176
+
177
+ ```
178
+
179
+
180
+
181
+ ・二重送信は「メールが送られた後にエラー画面が表示されてしまう」のままですが、こちらはJSで対処したいと思います

4

追記(進捗状況)

2019/06/14 13:12

投稿

kazoogon
kazoogon

スコア281

test CHANGED
File without changes
test CHANGED
@@ -116,4 +116,48 @@
116
116
 
117
117
 
118
118
 
119
+ ```
120
+
119
- ```if($request->session()->token() !== $request->input('_token')) {```の部分でこれをしていると思いますが、Laravel defaultの419のページが出る。という状態です
121
+ if($request->session()->token() !== $request->input('_token')) {
122
+
123
+ ```の部分でこれをしていると思いますが、Laravel defaultの419のページが出る。という状態です
124
+
125
+
126
+
127
+ 追記(進捗状況)
128
+
129
+ ---
130
+
131
+ App\Exceptions\Handler.phpを修正し、自分でExceptionのカスタマイズをした(「Handlerを書き換える」というのを今まではlaravel\framework\src\Illuminate\Foundation\Exceptions\Handler.phpの方だと勘違いしていた)
132
+
133
+
134
+
135
+ ```
136
+
137
+ //App\Exceptions\Handler.php
138
+
139
+ public function render($request, Exception $exception)
140
+
141
+ {
142
+
143
+ if ($exception instanceof TokenMismatchException) {
144
+
145
+ abort(401);
146
+
147
+ }
148
+
149
+ }
150
+
151
+
152
+
153
+ ```
154
+
155
+ **問題点
156
+
157
+ ①abortの代わりにreturn response()->view('errors.401');を使用するとview画面が表示されるが、abort(401)だと画面は真っ白 (できるだけabortを使用したい)
158
+
159
+
160
+
161
+ ・送信完了後、戻ってreloadする場合には対応できる
162
+
163
+ ・ダブルクリックされた場合は、メールが送られた後にエラー画面が表示されてしまう (JSでなくPHPの対応方法はあるか?)

3

追記の修正(view)

2019/06/14 10:57

投稿

kazoogon
kazoogon

スコア281

test CHANGED
File without changes
test CHANGED
@@ -68,27 +68,37 @@
68
68
 
69
69
  ```
70
70
 
71
- //resources/view/Errors/hoge.blade.php
71
+ //form submitするview
72
72
 
73
- @extends('../default')//header, footerなどるページ
73
+ //このページは確認画面なので、inputなどりません
74
74
 
75
+ <form method="POST" action="/submit">
75
76
 
77
+ @csrf
76
78
 
77
- @section('title') 419 エラー @endsection
79
+ <table>
78
80
 
81
+ <tr>
79
82
 
83
+ <th>名前</th>
80
84
 
81
- @section('head')
85
+ <td>{{$hoge->name}}</td>
82
86
 
83
- @endsection
87
+ </tr>
84
88
 
89
+ <tr>
85
90
 
91
+ <th>メールアドレス</th>
86
92
 
87
- @section('content')
93
+ <td>{{$hoget->email}}</td>
88
94
 
89
- セッションの有効期限が切れました。ページを再読込後、再度お試し下さい。
95
+ </tr>
90
96
 
97
+ </table>
98
+
99
+ <button name="submit">送信</button>
100
+
91
- @endsection
101
+ </form>
92
102
 
93
103
  ```
94
104
 

2

aro10さんの回答に対しての追記

2019/06/14 07:20

投稿

kazoogon
kazoogon

スコア281

test CHANGED
File without changes
test CHANGED
@@ -91,3 +91,19 @@
91
91
  @endsection
92
92
 
93
93
  ```
94
+
95
+ 追記(aro10さんの回答に対しての追記)
96
+
97
+ ---
98
+
99
+ > 1,フォーム表示時に、 セッションにフォーム用のキーでランダムデータを格納し、フォームのhidden入力欄に代入しておく
100
+
101
+
102
+
103
+ form内にLaravelの@csrfを挿入してあります。
104
+
105
+ > 2,フォーム送信時に送信内容と格納したセッションデータを検証、不一致の場合は専用のエラーページへ
106
+
107
+
108
+
109
+ ```if($request->session()->token() !== $request->input('_token')) {```の部分でこれをしていると思いますが、Laravel defaultの419のページが出る。という状態です

1

エラーview画面のコード追記

2019/06/14 07:10

投稿

kazoogon
kazoogon

スコア281

test CHANGED
File without changes
test CHANGED
@@ -59,3 +59,35 @@
59
59
  ![イメージ説明](cc01b49a7f6850e3f9d8c036caaf5ee8.png)
60
60
 
61
61
  よろしくお願いいたします。
62
+
63
+
64
+
65
+ 追記
66
+
67
+ ---
68
+
69
+ ```
70
+
71
+ //resources/view/Errors/hoge.blade.php
72
+
73
+ @extends('../default')//header, footerなどのあるページ
74
+
75
+
76
+
77
+ @section('title') 419 エラー @endsection
78
+
79
+
80
+
81
+ @section('head')
82
+
83
+ @endsection
84
+
85
+
86
+
87
+ @section('content')
88
+
89
+ セッションの有効期限が切れました。ページを再読込後、再度お試し下さい。
90
+
91
+ @endsection
92
+
93
+ ```