我制作了一个 Laravel REST api ,我用 axios (在vue应用程序中)调用了。我在服务器端制作了 laravel passport 身份验证,因此我必须将'Authorization:Bearer xxx ...'插入到ajax调用的标头中。
我想,我让我的代码尽可能干,所以在我的bootstrap.js(我启动了axios)中制作了这段代码:
function getTokens() {
axios.get('/oauth/personal-access-tokens')
.then(response => {
// window.usertokens = response.data;
if(response.data && response.data[0]&& response.data[0].id) {
var tokenid = response.data[0].id;
var auth = 'Bearer ' + tokenid;
window.axios.defaults.headers.common['Authorization'] = auth;
window.authToken = auth;
if(window.axios.defaults.headers.common['Authorization']) {
console.debug("token has been set succesfully. (token=" + window.axios.defaults.headers.common['Authorization'] + ")");
}
}
//
}).catch(e => {
console.error("gettoken errror: " + e);
});
};
在控制台上我写了授权设置,但是当我检查ajax调用的标题时,没有授权。
我知道问题是基于异步调用.. 但是否有任何解决方案,为了做得好? (有一次我问令牌和套装)。
提前做出建议和回应!
答案 0 :(得分:1)
您可能不应该使用默认标头。通过自己管理承载令牌并在每次调用的配置对象中提供它,您将获得更严格的控制。
function getTokens() {
axios.get('/oauth/personal-access-tokens')
.then(response => {
// window.usertokens = response.data;
if(response.data && response.data[0]&& response.data[0].id) {
var tokenid = response.data[0].id;
var auth = 'Bearer ' + tokenid;
store.axiosConfig = { headers : { 'Authorization' : auth }}
}
//
}).catch(e => {
console.error("gettoken errror: " + e);
});
};
然后从一些Vue组件中使用它......
// this will run whenever you assign the config, and not before!
watch:{
'store.axiosConfig' : function(){
if(this.store.axiosConfig)
axios.get('http://some-url',null,this.store.axiosConfig);
}
}