我有这个代码
<cfscript>
public struct function CreateToken() {
var result = '';
var apiKeys = {
'appKey' : variables.username,
'appSecret': variables.password
};
httpService = new http(method = "POST", url = "https://wesa.com/v1/tokens/create");
httpService.addParam(type = "header", name="Content-Type", value = "application/json");
httpService.addParam(type = "body", value = "#parseBody(apiKeys)#");
result = httpService.send().getprefix();
if(result.statuscode == '200') {
resultDeserialized = deserializeJSON(result.fileContent);
}
return resultDeserialized;
}
public struct function RefreshToken(required string token) {
var apiStruct = [:];
apiStruct['refreshToken'] = arguments.token;
httpService = new http(method = "POST", url = "https://wesa.com/v1/tokens/refresh");
httpService.addParam(type = "header", name="Content-Type", value = "application/json");
httpService.addParam(type = "body", value = "#parseBody(apiStruct)#");
result = httpService.send().getprefix();
if(result.statuscode == '200') {
resultDeserialized = deserializeJSON(result.fileContent);
}
return resultDeserialized;
}
</cfscript>
但我想了解如何自动调用刷新令牌,因为如果令牌处于活动状态且已过期,它会给我 401 状态。
我没有得到底层行为如何自动使用刷新它然后调用 API 进行调用。
就像一样,过期时间是8900秒,所以不确定时间过期后刷新令牌是否可用或检查它是否过期,只需调用刷新令牌
我只需要一些关于如何使用它的指导
答案 0 :(得分:1)
您可以构建一个拦截器,在响应状态为 401 时刷新令牌。
我在 react js 中做过这样的
axiosInstance.interceptors.response.use((response) => {
return response
}, error => {
const originalRequest = error.config;
if (error.response.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
const refreshToken: string = localStorage.getItem('refreshToken') || '';
const user: string = localStorage.getItem('user') || '';
let email: string;
if (refreshToken.length === 0 && user.length === 0) {
return Promise.reject(error);
}
email = JSON.parse(user).email;
return axiosInstance.post(refreshTokenUrl,
{
"email": `${email}`,
"refreshToken": `${refreshToken}`
}).then(res => {
if (res.status === 200) {
localStorage.setItem('token', res.data.token)
const accessToken = localStorage.getItem("token");
originalRequest.headers.authorization = 'Bearer ' + accessToken;
return axios(originalRequest)
}
})
}
});
或者您可以设置在令牌到期前刷新的计时器