Альтернатива хранилищу сеансов в API на основе токенов Laravel

#php #laravel #session-state

Вопрос:

Я создаю электронное приложение, которое подключается к приложению Laravel 8 (с использованием Jetstream по инерции) и API.

Я переношу существующие компоненты Vue Inertion Jetstream, чтобы воспроизвести ту же функциональность, которая появляется в реальном веб-приложении.

При использовании функции подтверждения пароля Laravel использует хранилище сеансов для хранения времени подтверждения пароля, а затем еще раз для проверки статуса подтвержденного пароля.

При использовании аутентификации по токену сеанс отсутствует.

Я могу создать новые контроллеры для решения этой проблемы без проблем, но как я могу заменить вызовы $request->session() ?

Код для хранения подтверждения пароля выглядит следующим образом:

 public function store(Request $request)
{
    $confirmed = app(ConfirmPassword::class)(
        $this->guard, $request->user(), $request->input('password')
    );

    if ($confirmed) {
       // here is the problem ... no session with tokens 
       $request->session()->put('auth.password_confirmed_at', time());
    }

    return $confirmed
                ? app(PasswordConfirmedResponse::class)
                : app(FailedPasswordConfirmationResponse::class);
}
 

Каков наилучший способ сохранить это, чтобы его можно было получить при последующих вызовах?

Ответ №1:

Я не совсем уверен, потому что он используется на мобильных устройствах, с которыми у меня нет опыта. Однако в браузере все, что вы могли бы сделать, это использовать файлы cookie и установить токен на HttpOnly. У меня есть небольшой пример в NodeJS из одного из моих хобби — проектов:

 const token = jwt.sign({ _id: currentUser._id }, process.env.JWT_SECRET, { expiresIn: '7d' });
currentUser.password = undefined;

res.cookie('token', token, {
    httpOnly: true,
});
 

Установив файл cookie на HttpOnly, пользователь не сможет с ним возиться. поскольку он мобильный, если он поддерживает файлы cookie, это еще меньше проблема с доступностью.
Родни

Комментарии:

1. Electron не является мобильным, он предназначен для настольных приложений. Хотя, я полагаю, вы могли бы возразить, что ноутбуки мобильны … Это не использование JWT, это просто маркеры API по умолчанию, сгенерированные в Jetstream, они sha_256 , насколько я помню. Я думаю, что в конечном итоге я могу просто создать новый столбец с меткой времени в таблице пользователей.

2. Моя вина, в таком случае мой комментарий аннулируется 🙂

3. Не волнуйся, приятель, я ценю твою помощь =)