【发布时间】:2019-11-07 00:29:17
【问题描述】:
我创建文件 JS 从数据库中获取令牌并将其保存在会话存储中,然后将此文件导入到 Vue 中的 app.js:
import Auth from './auth/auth';
new Vue({
el: "#app_resource",
router,
store,
beforeMount() {
window.auth = new Auth();
},
render: h => h(App)
});
文件auth.js
import axios from 'axios';
class Auth {
constructor() {
this.getToken();
let token = window.sessionStorage.getItem('token');
if (token) {
axios.defaults.headers.common['Authorization'] = 'Bearer ' + token;
}
}
getToken(){
let options = {
method: "post",
url: "/getapitoken",
headers: {
'Accept': 'application/json'
}
};
axios(options)
.then(response => {
let token = response.data.token
if (token) {
this.issetToken(token);
}
})
.catch(({ response }) => {
console.warn(response);
});
}
issetToken(token){
if (window.sessionStorage.getItem('token') === null) {
window.sessionStorage.setItem('token', token);
} else {
window.sessionStorage.removeItem('token');
window.sessionStorage.setItem('token', token);
}
axios.defaults.headers.common['Authorization'] = 'Bearer ' + token;
}
}
export default Auth;
会话存储中的令牌正确保存,但我有一个问题,因为我在登录后重定向到起始页面,起始页面正在从数据库获取数据,我需要令牌来获取这些数据。但是 Vue 返回错误 401(未经授权)(如 Vue 看不到令牌)。 我必须刷新页面,现在我可以从数据库中获取数据了。
如何在登录后不刷新页面的情况下获取日期?
【问题讨论】:
-
您是否尝试过使用
localStorage而不是sessionStorage?我有一个类似的设置,它适用于我。
标签: javascript vue.js axios unauthorized