У меня есть приложение Laravel 6.0, которое использует Sentinel для аутентификации.Я могу успешно войти в систему, однако после перенаправления на мою домашнюю страницу промежуточное программное обеспечение авторизации перенаправляет меня обратно на страницу входа.После входа в систему новая строка вставляется в таблицу постоянств, и в моем сеансе сохраняется переменная с именем 'cartalyst_sentinel' с тем же значением, что и строка постоянства.
Когда я вызываю Sentinel :: findByPersistenceCode с кодом сеансавнутри промежуточного ПО возвращается текущий пользователь, однако на одну строку позже Sentinel :: guest () возвращает true.
Контроллер аутентификации:
<?php namespace Schedules\Http\Controllers;
use Cartalyst\Sentinel\Laravel\Facades\Sentinel;
use Illuminate\Http\Request;
use Lang;
use Laracasts\Flash\Flash;
use Log;
use Illuminate\Support\Facades\Session;
use Activation;
/**
* Class AuthController
* @package Schedules\Http\Controllers
*/
class AuthController extends Controller
{
/**
* AuthController constructor.
*/
function __construct()
{
$this->middleware('guest', ['except' => 'getLogout']);
}
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function getLogin()
{
return view('auth.login');
}
/**
* @param Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function postLogin(Request $request)
{
$credentials = $request->except(['_token']);
if (empty($credentials['email']) || empty($credentials['password'])) {
Flash::error(Lang::get('auth.messages.empty_fields'));
return redirect('login');
}
if (Sentinel::authenticate($credentials, true)) {
log::debug("Succesfully logged in");
Log::debug(Sentinel::getUser()); // This prints the correct user
return redirect('/');
} else {
Flash::error(Lang::get('auth.messages.invalid_login'));
}
return redirect('login');
}
/**
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function getLogout()
{
Sentinel::logout(null, true);
return redirect('login');
}
}
Промежуточное ПО аутентификации:
<?php namespace Schedules\Http\Middleware;
use Cartalyst\Sentinel\Laravel\Facades\Sentinel;
use Closure;
use Illuminate\Contracts\Auth\Guard;
use Log;
use Session;
class Authenticate {
/**
* The Guard implementation.
*
* @var Guard
*/
protected $auth;
/**
* Create a new filter instance.
*
* @param Guard $auth
*/
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$user = Sentinel::findByPersistenceCode(Session::get('cartalyst_sentinel'));
Log::debug($user); // This prints the correct user
if (Sentinel::guest())
{
if ($request->ajax())
{
return response('Unauthorized.', 401);
}
else
{
return redirect()->guest('login');
}
}
return $next($request);
}
}
В обеих частях правильный логин напечатан в моем журнале.Но после этого Sentinel :: guest () возвращает true.
Как это может быть?