У меня есть аутентификация в моем веб-приложении nuxt с использованием модуля nuxt / auth. Я также использую модульные магазины Vuex для обработки различных состояний. После входа в систему все в порядке, и я могу нормально перемещаться по приложению. Но когда я пытаюсь перезагрузить страницу или получить к ней доступ напрямую через URL, пользователь становится недоступным, поэтому все веб-приложение становится непригодным для использования. Я пытаюсь получить доступ к объекту пользователя с this.context.rootState.auth.user
, который является нулевым после перезагрузки страницы или прямого доступа. Как ни странно, это происходит только в производстве.
Я уже пытался добавить if-guard, но, к сожалению, геттер не реагирует. Наверное, потому что это вложенный объект. Это мой текущий метод получения:
get someGetter() {
if (!this.context.rootState.auth.user) {
return []
}
const userId = this.context.rootState.auth.user.id as string
const arr = []
for (const item of this.items) {
// Using userId to add something to arr
}
return arr
}
Есть ли способ принудительно заставить nuxt завершить аутентификацию sh перед инициализацией vuex-модулей или сделать этот метод получения реактивным, поэтому он будет запускаться снова, когда объект пользователя доступен?
Вот так выглядит мой auth-config в nuxt.config.ts:
auth: {
strategies: {
local: {
_scheme: '@/auth/local-scheme',
endpoints: {
login: {
url: '/api/authenticate',
method: 'post',
propertyName: false
},
logout: { url: '/api/logout', method: 'post' },
user: { url: '/api/users/profile', propertyName: false }
}
},
// This dummy setting is required so we can extend the default local scheme
dummy: {
_scheme: 'local'
}
},
redirect: {
logout: '/login'
}
}
EDIT
Я решил это следующим ответом Райхана Кабира . Использование vuex-persistedstate в модуле аутентификации, который запускается каждый раз, когда сервер отображает страницу. Плагин сохраняет идентификатор пользователя в кулинарии ie, поэтому магазин может использовать его как запасной вариант, если модуль авторизации не готов.