我有一个在NextJS上运行的项目(带typescript),它使用NextAuth.js库来处理登录身份验证。在api目录下的api/auth/[...nextauth].ts
我使用凭据是为了向返回JWT令牌的私有API发送POST请求。令牌的存储和登录身份验证工作正常。但是,我需要能够访问并使用令牌对API进行授权调用。
我的期望是我可以访问存储的jwt令牌,将其作为api请求的一部分发送给未来的api调用,以便访问私有api端点。
我已经尝试使用usessession钩子访问令牌:
const { data: sessionData, status } = useSession();
const { accessToken }: any = sessionData;
然而,当我尝试这个,我得到一个错误:
TypeError: Cannot destructure property 'accessToken' of 'sessionData' as it is undefined.
我已经查看了文档,我发现我需要添加jwt和会话回调,我已经完成了:
callbacks: {
async jwt({ token, account }: any) {
// Persist the OAuth access_token to the token right after signin
if (account) {
token.accessToken = account?.accessToken;
}
return token;
},
async session({ session, token, user }: any) {
// Send properties to the client, like an access_token from a provider.
session.accessToken = token.accessToken;
return session;
},
},
但是,我仍然得到相同的未定义错误。
如何正确访问jwt令牌?
要访问新字段:"role",我做了这样的修改:
callbacks: {
async session({ session, token }) {
session.user.role = token.role;
return session;
},
async jwt({ token, user }) {
if (!token.role) {
token.role = user.role;
}
return token;
},
},
我想你重写了这里的值:token.accessToken = account?.accessToken;
。也许,您可以检查该值是否尚未定义。