Я пытаюсь реализовать функцию выхода из системы, которая работает на стороне сервера. В настоящее время эта функция удаляет только токены, хранящиеся в localStorage
, при входе в систему, как показано ниже:
const logout = () => {
localStorage.removeItem('accessToken');
localStorage.removeItem('idToken');
};
Однако этот подход приводит к ошибке, поскольку localStorage
недоступен на стороне сервера.
Вопрос:
Как я могу эффективно удалить accessToken
и idToken
, хранящиеся в localStorage
, со стороны сервера?
В контексте Nuxt 3 и удаления токенов из localStorage на стороне сервера я не пробовал напрямую изменять localStorage
, потому что там он недоступен.
Чего я ожидал:
Я ожидал, что функция выхода из системы успешно удалит токены (accessToken
и idToken
) с localStorage
на сервере после успешного выхода из системы, как это происходит на стороне клиента. Это фактически приведет к аннулированию сеанса пользователя.
@kissu Должен ли я изменить способ хранения токенов вместо использования localStorage?
Если вы хотите взаимодействовать как с клиентской, так и с серверной стороной, вам действительно нужно будет использовать что-то вроде файлов cookie. Не знаю, как вы хотите управлять своими вещами, но это никогда не будет плохим началом. В противном случае вы можете сделать короткую аннулацию своих токенов, чтобы срок их действия истекал каждые 120 секунд или примерно так. Таким образом, вам не придется делать какие-либо взломы на внутренней стороне вашего приложения Nuxt.
Прямо сейчас я удаляю токены на стороне клиента, как только сервер успешно ответит. Я думаю, что это хорошее временное решение, но со временем я хочу попробовать интегрировать Nuxt Auth в свой проект.
Для Nuxt доступно довольно много утилит авторизации, так что вы можете использовать официальный и чистый способ работы.
Вам следует useCookie
сделать это. По определению у вас не будет доступа к localStorage, поскольку он является локальным для клиента и не отправляется на сервер.
Пример:
const accessToken = useCookie("accessToken");
accessToken.value = undefined; // this deletes cookie;
accessToken.value = "ezY.." // this sets the value of cookie;
Этот код будет работать как на стороне сервера, так и на стороне клиента.
Спасибо, мне удалось получить accessToken после использования useCookie. Потому что раньше я принудительно использовал localStorage на стороне сервера, но так и не нашел способа
Если я не ошибаюсь, localStorage предназначен только для клиента. Следовательно, нет никакого способа сделать такое, ИМО.