所以基本上我正在开发一个使用身份验证的 nextjs 应用程序。我有 2 个函数,我在每次页面加载时运行。第一个检查 jwt cookie 是否存在,如果令牌不存在,则调用另一个函数来验证令牌。此函数从 wrapper.getServerSideProps 运行,并在上下文中作为 ctx 传递。此功能按预期工作。
export const checkServerSideCookie = (ctx) => {
const access = getCookie("access", ctx.req);
const refresh = getCookie("refresh", ctx.req);
if (access && refresh) {
return checkAuthentication(access, refresh);
} else return { isAuthenticated: false, token: null };
};
第二个功能是令牌验证器,这就是问题出现的地方。我有一个对象,如果验证成功,我打算更新它,如果不成功,就别管它。这是功能
export const checkAuthentication = (access, refresh) => {
const obj = {
isAuthenticated: false,
token: null,
};
const body = JSON.stringify({ token: access });
axios
.post("http://localhost:8000/api/jwtoken/verify/", body, {
headers: {
"Content-Type": "application/json",
},
})
.then((res) => {
obj.isAuthenticated = true;
obj.token = access;
})
.catch((err) => {
// call new token function using refresh
console.log("it doesnt work");
});
return obj;
};
问题是.then确实更新了对象,当我在.then中使用 console.log(obj) 时,它显示了要返回的正确 obj,但是当我返回 obj 时,它仍然保留 false 和 null 的初始值. 我不明白问题是什么。我尝试在 .then 本身中进行返回,但它通过了这个错误
TypeError: Cannot destructure property 'isAuthenticated' of 'Object(...)(...)' as it is undefined
。这里有什么问题?一切看起来都很好,但更新后的 obj 没有返回。