Как выйти из системы после истечения срока действия токена jwt - PullRequest
1 голос
/ 24 октября 2019

Я работаю над веб-приложением, используя node.js и vue.js, я выполняю аутентификацию и поддерживаю сеанс, используя jwt и passport.js, используя passport-jwtstrategy

Я сделал всеот создания jwt до защиты маршрутов - теперь все, что я имею в виду при генерации jwt Я передаю expiresIn:3600, поэтому я хочу автоматически выйти из системы из пользовательского интерфейса и удалить токен из localStorage, как только пройдет один час

При декодировании моего jwt Я получаю

 {
  "name": "Dheeraj",
  "iat": 1571896207,
  "exp": 1571899807
}

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

В моем файле auth.js vue store мой код выхода из системыкогда пользователь нажимает на кнопку выхода из системы

logout({ commit }) {
        return new Promise((resolve, reject) => {
            localStorage.removeItem('jwt-token')
            localStorage.removeItem('user-name')
            commit('setAuthUser', null)
            resolve(true)
        })

    },

В том же файле у меня есть метод getAuthUser, который запускается всякий раз, когда страница загружается или перезагружается, чтобы проверить, чтобы защитить Route и guestUser

getAuthUser({ commit, getters }) {
        const authUser = getters['authUser']
        const token = localStorage.getItem('jwt-token')
        const isTokenValid = checkTokenValidity(token)
        if (authUser && isTokenValid) {
            return Promise.resolve(authUser)
        }

        commit('setAuthUser', token)
        commit('setAuthState', true)
        debugger
        return token


    }

Так как я могу выйти из системы после истечения срока действия моего токена? Если кто-нибудь здесь, пожалуйста, подскажите, как мне выйти из системы после истечения срока действия токена

Редактировать

В моем маршрутизаторе.js файл

router.beforeEach((to, from, next) => {
store.dispatch('auth/getAuthUser')
    .then((authUser) => {
        const isAuthenticated = store.getters['auth/isAuthenticated']

        if (to.meta.onlyAuthUser) {
            if (isAuthenticated) {
                next()
            } else {
                next({ name: 'login' })
            }
        } else if (to.meta.onlyGuestUser) {
            if (isAuthenticated) {
                next({ name: 'welcome' })
            } else {
                next()
            }
        } else {
            next()
        }
    })

})

от моего авторафайл, который я вызываю, get authUser, который я уже упоминал выше

для проверки правильности токена. Я использую этот код

function checkTokenValidity(token) {
if (token) {
    const decodedToken = jwt.decode(token)
    return decodedToken && (decodedToken.exp * 1000) > new Date().getTime()

}
return false

}

, но он возвращает false, когда яна странице входа в систему и токена там нет, но как только я вошел в систему, он показывает null

Мой глобальный файл API

    import axios from 'axios';

export default () => {
    let headers = {
        'cache-control': 'no-cache'
    };
    let accessToken = localStorage.getItem('jwt-token');

    if (accessToken && accessToken !== '') {
        headers.Authorization = accessToken;

    };
    return axios.create({
        baseURL: 'http://localhost:8086/',
        headers: headers
    });
}

1 Ответ

1 голос
/ 24 октября 2019

См. Документ axios: https://github.com/axios/axios

import axios from 'axios';

export default () => {
    let headers = {
        'cache-control': 'no-cache'
    };
    let accessToken = localStorage.getItem('jwt-token');

    if (accessToken && accessToken !== '') {
        headers.Authorization = accessToken;

    };
    const instance = axios.create({
        baseURL: 'http://localhost:8086/',
        headers: headers
    });

    instance.interceptors.response.use((response) => {
        if(response.status === 401) {
             //add your code
             alert("You are not authorized");
        }
        return response;
    }, (error) => {
        if (error.response && error.response.data) {
             //add your code
             return Promise.reject(error.response.data);
        }
        return Promise.reject(error.message);
    });

    return instance;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...