2016-02-25 6 views
0

Я пытаюсь использовать систему аутентификации, которая встроена в laravel 5.2. Кажется, что логин работает правильно, если я заменю оператор return с помощью Auth :: check(), он возвращает true. Но когда я перенаправляюсь к '/', Auth :: check() внезапно возвращает false в моем промежуточном ПО Auth.Laravel 5.2, auth :: check return true после входа в систему, но false после перенаправления

Сессии Создать метод:

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', '[email protected]'); 
Route::get('/logout', '[email protected]'); 
Route::get('/login', function() { 
    return view('login'); 
}); 

Route::group(['middleware' => ['web', 'auth']], function(){ 
    Route::get('/', '[email protected]'); 
}); 
+0

Какой драйвер сеанса вы используете? – phaberest

+0

Файл, но я также пробовал с cookie – bim

+0

Используете ли вы как сетевое, так и сетевое промежуточное ПО на этих маршрутах? – Ohgodwhy

ответ

2

ВСЕ маршруты, требующие сессий (которые использует Auth) должны иметь " web ' прикладное программное обеспечение.

также:

Ваш Auth::check() делается в блоке кода, который работает только если Auth::guest() верно. Auth::guest() - это инверсия Auth::check().

Итак, вы говорите в своем промежуточном программном обеспечении: если текущий пользователь является гостем (не аутентифицирован), проверьте, являются ли они аутентифицированным пользователем, который всегда будет ложным на данном этапе.

Update:

на основе ваших комментариев: Не добавляйте AUTHENTICATE промежуточного уровня в группе «Интернет». Если вы сделаете это, вы никогда не сможете попасть в «веб-маршрут», если только вы не прошли аутентификацию до того, как сделали это изменение. Вы удаляете возможность даже войти в систему, если вы это сделаете.

+0

Теперь исправлено: мне пришлось применить сетевое промежуточное ПО на всех маршрутах входа/выхода, а затем использовать промежуточное ПО auth для маршрутов, требующих проверки подлинности. – bim