Я работаю над веб-приложением, используя 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
});
}