Как получить пользователя из Django JWT токена в Vue? - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь извлечь пользователя из моего токена JWT, который обслуживается из конечной точки API Django-Rest, /get-token/ и сохранить пользователя в моем магазине Vuex.

У меня нет настроенной конечной точки для возврата зарегистрированного в user, и хотя это может быть потенциальным решением, я не вижу причин делать это вместо того, чтобы извлекать пользователя из токена JWT.

Я пытался получить пользователя напрямую из токена JSON через this.$store.commit('setAuthUser', response.data.user) и response.data.user.username

Login.Vue

axios.post(this.$store.state.endpoints.obtainJWT, payload)
                    .then((response) => {
                        this.$store.commit('updateToken', response.data.token)
                        this.$store.commit('setAuthUser', response.data.user) -------This line is not working
                        console.log(response.data)
                    })

store.js

export default new Vuex.Store({
    state: {
        authUser: {},
        isAuthenticated: false,
        jwt: localStorage.getItem('token'),
        endpoints: {
            obtainJWT: 'http://127.0.0.1:8000/get-token/',
            refreshJWT: 'http://127.0.0.1:8000/refresh-token/',
            baseUrl: 'http://127.0.0.1:8000/main/api/',
        }
    },

    mutations: {
        setAuthUser(state, {
            authUser,
            isAuthenticated
        }) {
            Vue.set(state, 'authUser', authUser)
            Vue.set(state, 'isAuthenticated', isAuthenticated)
        },
        updateToken(state, newToken) {
            localStorage.setItem('token', newToken);
            state.jwt = newToken;
        },
        removeToken(state) {
            localStorage.removeItem('token');
            state.jwt = null;
        }
    }
});

Ожидается: правильно извлеченный пользователь и сохраненный в Vuex с помощью мутатора setAuthUser

Факт: ошибка Cannot destructure property 'authUser' of 'undefined' or 'null'.

...