Nuxt Auth Module - сохранить JWT в магазине Vuex - PullRequest
0 голосов
/ 21 июня 2019

Вход в систему / выход из системы / промежуточное ПО и т. Д. Сами по себе работают, но я, похоже, не могу контролировать токен.Я пытаюсь сохранить JWT в хранилище Vuex после входа в систему, но токен сохраняется только в cookie и localStorage.Из документации я понимаю, что поддержка аутентификации в Vuex добавляется автоматически.Я не определил tokenRequired и tokenType в конфигурации, так как в соответствии с документацией они необходимы для потока на основе файлов cookie (также их добавление ничего не изменило).

nuxt.config.js

modules: [
    '@nuxtjs/axios',
    '@nuxtjs/auth'
],
axios: {
    baseURL: 'https://api.example.com/'
},
router: {
    middleware: ['auth']
},
auth: {
    strategies: {
        local: {
            endpoints: {
                login: { url: 'login', method: 'post', propertyName: 'token' },
                logout: { url: 'logout', method: 'post' },
                user: false
            }
        }
    },
    redirect: {
        login: '/login',
        logout: '/',
        callback: '/login',
        home: '/'
    }
},

функция входа в систему

await this.$axios.post('authenticate', {
    email: this.email,
    password: this.password
}).then(response => {
    if (response.success === 'true') {
        this.$auth.setUserToken(response.token)
    } else {
        //alert invalid login
    }
}).catch(error => {
    //alert server error
});

Теперь, когда я успешно вошел в систему и посмотрел на $ auth. $ State , он возвращает

{ "user": {}, "loggedIn": true, "strategy": "local" }

Я ожидаю, что токен также будет сохранен в $auth.

Я также посмотрел вопрос с аналогичным названием , но его решение не работаетдля меня, как я использую user: false.

1 Ответ

0 голосов
/ 21 июня 2019

Я посмотрел на файл default.js модуля auth и попробовал значения по умолчанию в моем nuxt.config.js.После добавления по умолчанию в мою конфигурацию он начал работать.Так что теперь я смог отключить куки и localStorage, сохраняя JWT только в хранилище.

auth: {
    strategies: {
        local: {
            endpoints: {
                login: { url: 'login', method: 'post', propertyName: 'token' },
                logout: { url: 'logout', method: 'post' },
                user: false
            }
        }
    },
    redirect: {
        login: '/login',
        logout: '/',
        callback: '/login',
        home: '/'
    },
    cookie: false,
    localStorage: false,
    token: {
        prefix: 'token.'
    },
},

И $auth.$state возвращает

{ "user": {}, "loggedIn": true, "strategy": "local", "token.local": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" }

Если у кого-то есть объяснение, почему по умолчаниюЗначение не работает, и почему я должен был включить его в свою конфигурацию, пожалуйста, дайте мне знать.Я полагаю, по какой-то причине они отключили сохранение Vuex по умолчанию?Несмотря на то, что в документации говорится, что то, что можно интерпретировать как токен по умолчанию, сохраняется в трех местах.

Токены аутентификации хранятся в различных провайдерах хранения (cookie, localStorage, vuex)

...