храните извлеченные данные и используйте в компонентах в Nuxtjs

#vue.js #vuejs2 #nuxt.js #vuex #nuxtjs

#vue.js #vuejs2 #nuxt.js #vuex #nuxtjs

Вопрос:

Я хочу получать данные со своего сервера и использовать их в компонентах, но когда я извлек данные, я не хочу продолжать отправлять запросы на мой сервер.

Когда пользователь входит в систему, я извлекаю его данные и сохраняю их в SET_USER_INFO.

 async login({ commit, state }, account) {
        try{
            await auth.signInWithEmailAndPassword(account.email, account.password);

            if(!auth.currentUser.emailVerified){
                throw {
                        error: "Email didnot verified!",
                        code: "auth/email-unverified"
                    }
            }
            const token = await auth.currentUser.getIdToken(true);
            const { email, uid } = auth.currentUser;
    
            Cookie.set('access_token', token);

            commit('SET_USER', { email, uid });

            const path = '/api/fetch_user_info';
            const res = await this.$axios.get(path);
            commit('SET_USER_INFO', res.data);
 

но когда я пытаюсь получить доступ к данным из компонентов, они не определены

 methods: {
        test() {
            this.user_info = this.$store.state.users.user_info;
            console.log(this.$store.state.users.user_info);
        }
    },
    beforeMount() {
        this.test();
    },
 

Я пытался получить данные в функции nuxtServerInit, но все равно не могу получить доступ к данным из функций промежуточного программного обеспечения. Я много чего перепробовал. Если это непонятно, я могу добавить подробности.

Комментарии:

1. Также я не уверен, безопасно ли хранить некоторую нечувствительную информацию о пользователе в файлах cookie?

Ответ №1:

Хорошо, я нахожу правильное решение.

Я добавляю следующие строки в функцию промежуточного программного обеспечения:

 export default async function ({ store, route, redirect, from, req }) {
    if (!from){
        let token = cookieparser.parse(req.headers.cookie).access_token;
        console.log('request send');
        await store.dispatch('users/getUserInfo', token);
    }
}
 

и мой getUserInfo выглядит так:

 async getUserInfo({ commit }, token=null) {
        let access_token;
        (token != null) ? access_token = token : access_token = Cookie.get('access_token');
        const path = '/api/get_user_info';
        const res = await this.$axios.get(path, {
            headers: {
                Authorization: `Bearer ${access_token}`
            },});
        commit('SET_USER_INFO', res.data);
}
 

Я думаю, что это правильное решение. Если вы поделитесь своими комментариями, я был бы рад

ссылка: https://www.youtube.com/watch?v=sSbahlvDfS4