【发布时间】:2018-05-22 18:20:08
【问题描述】:
我正在使用 JWT 令牌认证系统,当我登录时,我会得到这样的令牌:
axios.post('/login', data)
.then(response => {
localStorage.setItem('token', response.data.token);
});
这很好用,令牌保存在 localStorage 中。但是,令牌不包含在以后的请求中。 Authorization 标头是Bearer null。
这就是我设置全局 axios 对象的方式。
window.axios = axios.create({
baseURL: '/api/',
timeout: 10000,
headers: {
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN': document.head.querySelector('meta[name="csrf-token"]').content,
'Authorization': 'Bearer ' + localStorage.getItem('token')
}
});
如果我刷新网站,token 已设置,并且可以正确使用。
编辑:
我通过从create() 方法中删除Authorization 标头并改用window.axios.defaults.headers.common['Authorization'] 来使其工作。但是现在 Laravel Echo 出现了同样的问题。我这样创建实例:
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'xxx',
cluster: 'eu',
encrypted: true,
namespace: 'xxx',
auth: {
headers: {
'Authorization': 'Bearer ' + localStorage.getItem('token')
}
}
});
我像这样更新标题:
window.setAuthToken = (token) => {
window.axios.defaults.headers.Authorization = 'Bearer ' + token;
window.Echo.options.auth.headers.Authorization = 'Bearer ' + token;
localStorage.setItem('token', token);
}
axios 标头更新成功,但 Echo 没有更新。
【问题讨论】:
-
请检查答案。我还没有测试过,但它应该可以工作。
-
查看更新的答案。
标签: javascript axios