如何使用NextAuth访问JWT令牌以便在以后的API调用中使用?



我有一个在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;。也许,您可以检查该值是否尚未定义。

最新更新