#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. Не волнуйся, приятель, я ценю твою помощь =)