Почему мой пользователь Sentinel недоступен после перенаправления? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть приложение 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.

Как это может быть?

...