Я пытаюсь использовать систему аутентификации, которая встроена в laravel 5.2. Кажется, что логин работает правильно, если я заменю оператор return с помощью Auth :: check (), он возвращает true. Но когда я перенаправляюсь к '/', Auth :: check () внезапно возвращает false в моем промежуточном ПО Auth.
Сеансы Создание метода:
public function create(Request $request) { $email = $request->email; $password = $request->password; if(Auth::attempt(['email' => $email, 'password' => $password])) { return redirect()->intended('/'); // returns true when replaced with Auth::check(); } return redirect("login"); }
Auth Middleware:
public function handle($request, Closure $next, $guard = null) { if (Auth::guest()) { if ($request->ajax() || $request->wantsJson()) { return response('Unauthorized.', 401); } else { return var_dump(Auth::check()); // returns false } } return $next($request); }
Файл маршрутов:
Route::post('/create-session', 'SessionController@create'); Route::get('/logout', 'SessionController@logout'); Route::get('/login', function() { return view('login'); }); Route::group(['middleware' => ['web', 'auth']], function(){ Route::get('/', 'HomeController@getIndex'); });
Для всех маршрутов, требующих сеансов (которые используются Auth), должно быть применено промежуточное ПО «web» .
Также:
Ваш Auth::check()
выполняется в блоке кода, который выполняется только в том случае, если Auth::guest()
является истинным. Auth::guest()
– это инверсия Auth::check()
.
Таким образом, вы говорите в своем промежуточном программном обеспечении: если текущий пользователь является гостем (не аутентифицирован), проверьте, являются ли они аутентифицированным пользователем, который всегда будет ложным на данном этапе.
Обновить:
Основываясь на ваших комментариях: не добавляйте промежуточное программное обеспечение для проверки подлинности в «веб-группу». Если вы сделаете это, вы никогда не сможете попасть в «веб-маршрут», если только вы не прошли аутентификацию до того, как сделали это изменение. Вы удаляете возможность даже войти в систему, если вы это сделаете.