Перенаправить перед входом в систему laravel, чтобы избежать повторного входа - PullRequest
0 голосов
/ 06 марта 2020

У меня есть php / laravel веб-приложение. Я использую laravel auth для входа в систему. Но когда у меня есть две открытые карточки со страницей входа, они не знают, что на одной странице пользователь вошел в систему.

Я прочитал, что я должен перенаправить в промежуточное ПО, когда пользователь вошел на одну страницу.

Я пытаюсь сделать это в LoginController с функцией переопределения, но она не работает.

public function authenticate(Request $request)
    {
        $credentials = $request->only('email', 'password');

        if (Auth::check()){
            return redirect()->intended('dashboard');
        } else if (Auth::attempt($credentials)) {
            return redirect()->intended('dashboard');
        }
    }

Я просто хочу проверить, прежде чем войти в приложение, вошедшее в систему, но я не знаю точно где.

1 Ответ

1 голос
/ 06 марта 2020

Хорошо, я пытаюсь объяснить, что происходит

Когда вы открываете две формы входа и c в ваших формах входа, у вас уже есть поле токена csrf со сгенерированным значением, а c это шаблон, НО

давайте предположим, что ваше значение csrf_token равно 123 в обеих формах, и при успешном входе в систему laravel обновляет ваш сеанс, добавляя к нему свой user_id, так что если ваш user_id равен 1, то ваш токен изменится на 1231 (опять же, это хэшированное значение, но идите вместе со мной), и когда вы отправляете вторую форму с токеном 123, как вы можете догадаться, 123 не равен 1231 и выдает TokenMissmatchException

В вашем случае вы можете открыть App\Exceptions\Handler.php и добавить это к вашему методу обработчика

/**
 * Render an exception into an HTTP response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Throwable  $exception
 * @return \Symfony\Component\HttpFoundation\Response
 *
 * @throws \Throwable
 */
public function render($request, Throwable $exception)
{
    // Checks if exception is instance of TokenMissmatchException && it throwed in the login page
    if ($exception instanceof \Illuminate\Session\TokenMismatchException && $request->path() === 'login') {
        $redirectPath = '/';

        return redirect($redirectPath);
    }

    return parent::render($request, $exception);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...