Должно ли перенаправление с данными флэш-памяти сохранять данные флэш-памяти, если задействовано промежуточное ПО аутентификации?
Обратите внимание на несколько вещей, которые помогут ответить на некоторые возможные вопросы:
$ Request-> сессия () -> перепрошить ();
Таким образом, Authenticate.php теперь выглядит следующим образом:
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
}
$request->session()->reflash();
return $next($request);
}
Эта проблема также влияет на шаблон auth, сгенерированный make: auth, в результате чего $ errors не отображается при ошибке.
ОБНОВЛЕНИЕ (3/29 @ 08:54 EST)
Как выяснилось ниже, я обнаружил, что, по моему мнению, является основной причиной. Каждый маршрут дважды вызывал «веб» промежуточное ПО. Таким образом, фактически выполнялись два запроса, которые удаляли флеш-сообщение (сообщения), прежде чем пользователь имел возможность их увидеть. Оригинальный маршрут: список ниже.
+--------+----------+-------------------------+------+-----------------------------------------------------------------+---------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+-------------------------+------+-----------------------------------------------------------------+---------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | groups | | App\Http\Controllers\GroupsController@index | web,web,auth |
| | GET|HEAD | groups/set-default/{id} | | App\Http\Controllers\GroupsController@setDefaultGroup | web,web,auth |
| | GET|HEAD | home | | App\Http\Controllers\HomeController@index | web,web,auth |
| | GET|HEAD | login | | App\Http\Controllers\Auth\AuthController@showLoginForm | web,web,guest |
| | POST | login | | App\Http\Controllers\Auth\AuthController@login | web,web,guest |
| | GET|HEAD | logout | | App\Http\Controllers\Auth\AuthController@logout | web,web |
| | POST | password/email | | App\Http\Controllers\Auth\PasswordController@sendResetLinkEmail | web,web,guest |
| | POST | password/reset | | App\Http\Controllers\Auth\PasswordController@reset | web,web,guest |
| | GET|HEAD | password/reset/{token?} | | App\Http\Controllers\Auth\PasswordController@showResetForm | web,web,guest |
| | GET|HEAD | register | | App\Http\Controllers\Auth\AuthController@showRegistrationForm | web,web,guest |
| | POST | register | | App\Http\Controllers\Auth\AuthController@register | web,web,guest |
| | GET|HEAD | visitees | | App\Http\Controllers\VisiteesController@index | web,web,auth |
| | GET|HEAD | visitees/check-in/{id} | | App\Http\Controllers\VisiteesController@checkIn | web,web,auth |
+--------+----------+-------------------------+------+-----------------------------------------------------------------+---------------+
Мои маршруты теперь выглядят следующим образом после удаления маршрутов из промежуточного программного обеспечения «web»:
+--------+----------+-------------------------+------+-----------------------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+-------------------------+------+-----------------------------------------------------------------+------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | groups | | App\Http\Controllers\GroupsController@index | web,auth |
| | GET|HEAD | groups/set-default/{id} | | App\Http\Controllers\GroupsController@setDefaultGroup | web,auth |
| | GET|HEAD | home | | App\Http\Controllers\HomeController@index | web,auth |
| | GET|HEAD | login | | App\Http\Controllers\Auth\AuthController@showLoginForm | web,guest |
| | POST | login | | App\Http\Controllers\Auth\AuthController@login | web,guest |
| | GET|HEAD | logout | | App\Http\Controllers\Auth\AuthController@logout | web |
| | POST | password/email | | App\Http\Controllers\Auth\PasswordController@sendResetLinkEmail | web,guest |
| | POST | password/reset | | App\Http\Controllers\Auth\PasswordController@reset | web,guest |
| | GET|HEAD | password/reset/{token?} | | App\Http\Controllers\Auth\PasswordController@showResetForm | web,guest |
| | GET|HEAD | register | | App\Http\Controllers\Auth\AuthController@showRegistrationForm | web,guest |
| | POST | register | | App\Http\Controllers\Auth\AuthController@register | web,guest |
| | GET|HEAD | visitees | | App\Http\Controllers\VisiteesController@index | web,auth |
| | GET|HEAD | visitees/check-in/{id} | | App\Http\Controllers\VisiteesController@checkIn | web,auth |
+--------+----------+-------------------------+------+-----------------------------------------------------------------+------------+
При перемещении маршрутов из группы промежуточного программного обеспечения «Интернет», флэш-сообщение отображается правильно. Но теперь у меня есть новая проблема!
Флэш-сообщения не удаляются из сеанса после первоначального запроса. Они сохраняются при каждом последующем запросе, пока не будут сброшены или забыты вручную.
На данный момент я не уверен, стоит ли мне открывать второй вопрос, который конкретно касается сохранения данных флэш-памяти. Пожалуйста, сообщите, если так.
пожалуйста, запустите composer update
обновить laravel / framework до v5.2.27, затем выпустить php artisan make:auth
восстановить аутентичные маршруты
Других решений пока нет …