我正在开发一个网络应用程序,使用node.js
and vue.js
,我正在使用进行身份验证和维护会话jwt
and passport.js
using passport-jwtstrategy
我已经完成了从创建 jwt 到保护路由的所有事情,现在我的问题是生成jwt
我正在路过expiresIn:3600
所以我想从 Ui 自动注销我的用户,并在一小时后从 localStorage 中删除令牌
在解码我的jwt
我正进入(状态
{
"name": "Dheeraj",
"iat": 1571896207,
"exp": 1571899807
}
那么我怎样才能实时获取注销时间
In my auth.js
当用户单击注销时,vue 存储文件我的注销代码是
logout({ commit }) {
return new Promise((resolve, reject) => {
localStorage.removeItem('jwt-token')
localStorage.removeItem('user-name')
commit('setAuthUser', null)
resolve(true)
})
},
在同一个文件中,我有一个方法getAuthUser
每当页面加载或卸载时都会运行以检查以保护路由和来宾用户
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
}
那么一旦我的令牌过期我该如何注销
这里的任何人请指导我如何在令牌过期后注销
Edit
在我的 router.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()
}
})
})
从我的 auth 文件中,我正在调用 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
});
}