Я создаю приложение с Nuxt, используя nuxt и nuxt-auth для обработки аутентификации.
Я хочу иметь два промежуточных программного обеспечения для аутентификации - авторизацию и гостя. Пользователь авторизации не должен иметь доступа к странице входа ('/') и будет перенаправлен на панель инструментов, но может получить доступ везде. Пользователь-гость не должен иметь доступа к какой-либо странице, кроме страницы входа, и при любых попытках будет перенаправлен на страницу входа.
В настоящее время все работает нормально в отношении аутентификации и входа в систему. Однако, когда аутентифицированный пользователь щелкает ссылку «/» ИЛИ обновляет страницу, он отправляется на страницу входа и снова получает «гостевые» привилегии, даже если они все еще установлены на «loggedIn» в хранилище vuex. Похоже, что когда SSR запускается в хранилище авторизации, он недоступен на сервере, поэтому он перенаправляет пользователя на страницу входа, а затем все портится, однако это предположение.
Ниже приведен код:
// макет/по умолчанию <- используется для страницы входа
export default {
middleware: 'guest'
}
// layout/dashboard <- используется для всех страниц только для аутентифицированных пользователей
export default {
middleware: 'auth'
}
// промежуточное ПО/guest.js
export default function (ctx) {
if (ctx.app.$auth.$state.loggedIn) {
return ctx.app.$auth.redirect('home')
}
}
Другое промежуточное ПО для аутентификации создается с помощью «nuxt-auth». Файл nuxt.config.js имеет следующие настройки:
auth: {
localStorage: false,
cookie: {
options: {
secure: true
}
},
redirect: {
login: '/',
logout: '/',
callback: '/api/auth/callback',
home: '/dashboard'
}
},





Я думать Я это решил. Проблема, похоже, была связана с отображением страницы на стороне сервера, поскольку у нее не было доступа к файлу cookie аутентификации, поэтому я сделал еще одно промежуточное программное обеспечение, которое применяется ко всему сайту для проверки аутентификации, которое делает следующее:
// Проверяем авторизацию
export default function (context) {
context.store.dispatch('auth/initAuth', context.req)
}
Затем в хранилище Vuex мы проверяем, являемся ли мы process.server, и извлекаем JWT из заголовка cookie. Затем мы устанавливаем хранилище авторизации с пользователем перед запуском промежуточного программного обеспечения аутентификации и гостя.
Мне просто нужно пропинговать API, чтобы проверить, что JWT действителен, и тогда это должно быть так.