我正在使用node.js
和vue.js
开发网络应用程序,正在使用jwt
和passport.js
使用passport-jwtstrategy
进行身份验证并维护会话< / p>
我已经完成了从创建jwt到保护路由的所有工作,现在我的问题是生成jwt
时我正在传递expiresIn:3600
,所以我想从Ui中自动注销用户并删除一小时后从localStorage获得令牌
在解码我的jwt
时,我会得到
{
"name": "Dheeraj",
"iat": 1571896207,
"exp": 1571899807
}
那么我如何获得注销的实时信息
在auth.js
vue商店文件中,当用户单击注销时,我的注销代码为
logout({ commit }) {
return new Promise((resolve, reject) => {
localStorage.removeItem('jwt-token')
localStorage.removeItem('user-name')
commit('setAuthUser', null)
resolve(true)
})
},
在同一个文件中,我有一个方法getAuthUser
,该方法在页面加载或重新加载时都在运行,以检查以保护rout和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
}
所以我的令牌过期后如何注销 任何人在这里,请指导我,令牌过期后如何注销
修改
在我的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()
}
})
})
从我的身份验证文件中,我正在调用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
});
}
答案 0 :(得分:1)
请参阅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;
}