我正在尝试在我的 SPA 中实现刷新令牌流,刷新令牌将存在于 httpOnly 安全 cookie 中,因为我仍在本地开发,安全标志目前设置为 false。当访问令牌不再有效时,我正在使用 axios 调用 refreshToken 端点,因此当我从 api 获得未经授权的响应时。问题是我的 refreshToken 端点需要一个
refresh_token
的 cookie,但没有随请求发送任何 cookie。如果我将 httpOnly 标志设置为 false,cookie 将随请求一起发送,没问题。
我如何设置我的饼干:
const handleLogin = (
params: LoginParams,
errorCallback?: ErrCallbackType
) => {
axios
.post(authConfig.loginEndpoint, params)
.then(async (res) => {
// Set the access token in memory
setAccessToken(res.data.access_token);
setCookie("refresh_token", res.data.refresh_token, {
maxAge: 30 * 24 * 60 * 60,
httpOnly: true,
secure: process.env.NEXT_PUBLIC_STAGE === "production",
path: "/",
});
const returnUrl = router.query.returnUrl;
const redirectURL = returnUrl && returnUrl !== "/" ? returnUrl : "/";
await router.replace(redirectURL as string);
})
.catch((err) => {
if (errorCallback) errorCallback(err);
});
};
我如何使用 axios 调用 refreshToken 端点:
axios
.post(authConfig.refreshTokenEndpoint, null, { withCredentials: true })
.then((res) => {
if (res.data.error) {
console.log(res.data.error);
} else {
console.log("We got a new refresh token token");
}
});