如何使用next-auth管理令牌

问题描述 投票:0回答:1

我最近一直在后端/前端工作。 我正在构建一个简单的笔记应用程序,我对登录过程有疑问。

我正在使用 next.js 应用程序目录,并且我正在尝试使用 google oauth 登录和 next-auth。 我想知道如何在这个过程中管理令牌。

在其他博客中,您多次提到“cookie”和“本地存储”。 但我在后端使用express,并且我想将access_token存储在数据库中。

这是代码

export const authOptions: NextAuthOptions = {
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_ID ?? '',
      clientSecret: process.env.GOOGLE_SECRET ?? '',
    }),
  ],
  session: {
    strategy: 'jwt',
    maxAge: 30 * 24 * 60 * 60, // 30 days
    updateAge: 24 * 60 * 60, // 24 hours
  },

  secret: process.env.NEXTAUTH_SECRET,

  callbacks: {
    async signIn({ user, account }) {
      const dataToSend = {
        user: {
          ...user,
          accessToken: account?.access_token,
          expires: account?.expires_at,
        },
      };

      const res = await fetch(
        `${process.env.NEXT_PUBLIC_SERVER_URL}/api/user`,
        {
          method: 'POST',
          body: JSON.stringify(dataToSend),
        },
      );

      if (!res.ok) {
        console.error('error!');
        return false;
      }

      return true;
    },

    async jwt({ token, account }) {
      if (account) {
        token.accessToken = account.access_token;
      }

      return token;
    },

    async session({ session, token }) {
      session.user = token as any;

      return session;
    },
  },
};

这里我们使用 jwt 和 session 通过“useSession hooks”从客户端或服务器获取 access_token。 我还可以在登录时将 access_token 放入服务器数据库中。

当我们发送请求时,我们将“session.user.access_Token”放入带有授权的标头中。

但是我有一个问题,我不知道如何处理刷新令牌,每当我登录时,都会发送令牌并且过期时间不断更新,即每当我登录时,令牌都会不断更新。

这是正确的做法吗?如果还有其他方法请告诉我。

此外,当我使用 next-auth 时,看起来我有一个 prisma 适配器。

登录时使用prisma适配器将数据直接保存到数据库后,

当需要accessToken时,客户端通过useSession hook获取token,后端将其与DB中存储的token进行比较并授权请求?

PrismaAdapter()

cookies next.js token next-auth
1个回答
0
投票

回复我写的。 我在我的 Express 服务器上使用 DB,但我将其更改为不在 DB 中存储令牌。

相反,我也在express上安装了next-auth作为一个包。 当客户端请求 API 时,如果您查看 cookie,它会发送下一个身份验证令牌。

并且快递服务器解密该令牌。 为此,我们使用 getToken 函数。这可以从 next-auth 库导入。

下一个身份验证 getToken

希望您不必像我一样经历同样的尝试和错误。

© www.soinside.com 2019 - 2024. All rights reserved.