我目前正在使用Javascript
和Axios
在客户端应用程序上工作。
我在第一个refreshToken();
请求的响应中运行了一个axios请求(axios
)和另一个userAuth();
请求回调(axios
),我收到了一个新令牌。
我尝试在我的回调的标题authorization
承载中设置这个新标记。
这不起作用:在回调(userAuth();
)上,未设置新令牌,并且标题中不再设置授权承载。
如果userAuth();
不是回调,则Authorization
Bearer
设置正确。
如果userAuth();
是回调,则Authorization
Bearer
未设置。
let now = new Date();
let time = now.getTime();
time += 3600 * 1000;
now.setTime(time);
const setTokenOnCookie = (token) => {
document.cookie = 'token=' + token + '; expires=' + now.toUTCString();
}
const setRefreshOnCookie = (refresh_token) => {
document.cookie = 'refresh_token=' + refresh_token;
}
const TOKEN_USER = document.cookie.replace(/(?:(?:^|.*;\s*)token\s*\=\s*([^;]*).*$)|^.*$/, "$1");
const REFRESH_TOKEN = document.cookie.replace(/(?:(?:^|.*;\s*)refresh_token\s*\=\s*([^;]*).*$)|^.*$/, "$1");
const refreshToken = (userAuthCallback, userUnauthCallback) => {
axios.post(`${API_URL}/my/url/to/refresh/token`,
'refresh_token='+REFRESH_TOKEN,
{headers:{'Content-Type': 'application/x-www-form-urlencoded'}}
).then(res => {
Promise.all([setTokenOnCookie(res.data.token), setRefreshOnCookie(res.data.refresh_token)])
.then(()=>{
userAuthCallback(res.data.token);
}).catch(err => {
userUnauthCallback();
})
}
const userAuth = (token) => {
if(!token){
token = TOKEN_USER
}
axios.get(`${API_URL}/my/url/to/get/my/user`,
{headers:{'Authorization': `Bearer ${token}`}}
).then(res => {
pushToApplicationPath();
}).catch(err => {
catchMyError();
})
}
const userUnauth = () => {
document.cookie = 'token=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
document.cookie = 'refresh_token=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
document.cookie = 'username=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
pushToLoginPath();
}
refreshToken(userAuth, userUnauth);
你知道问题出在哪里吗?