【问题标题】:Next Auth + Next JS下一个身份验证 + 下一个 JS
【发布时间】:2021-04-20 13:11:36
【问题描述】:

我正在尝试使用 NextAuth 作为我的项目的身份验证提供程序。我有一个要求,我有基于凭据的登录名/密码。在这种情况下,当我登录时,我必须将用户名/密码传递给自定义 API(例如:abc.com/auth/login)。这个 API 成功后将返回一个 JWT,以便将来访问他们的资源。

我从 NextAuth 了解到它维护自己的会话和 JWT(如果未提供 DB)。此功能适用于我的情况,但我必须维护 API 返回给我的 JWT(如上所述)。所以现在有两个 JWT,一个是我从 API 收到的,一个是 NextAuth 创建的。

我的问题:

  • 有什么方法可以用来维护我从 API 收到的自定义 JWT?
  • 如果 API 令牌已过期,是否有办法让我可以终止 NextAuth 会话。
  • 保持 NextAuth 会话和自定义 JWT 令牌同步的最佳方法是什么?

提前致谢!

【问题讨论】:

    标签: jwt next.js next-auth


    【解决方案1】:

    在 Next-auth repo 讨论本身上得到了答案。

    这个解决方案对我有用。

    因此,我们可以让 next-auth 生成包含与 API 提供的相同有效负载的 JWT 令牌(我们可以在 API 中禁用令牌签名验证)。

    然后更新 next-auth 配置,让 cookie 中的保存令牌具有 httpOnly: false ,这样我们就可以通过在配置中添加令牌来访问服务器端和客户端:

    const options = {
       // ...
       cookies: { sessionToken: { name: `next-auth.session-token`, options: { httpOnly: false } } },
    }
    

    之后,我们可以使用代码获取 JWT 令牌以从服务器端和客户端传递给 API 调用:

    import cookies from 'next-cookies'
    import Cookies from 'js-cookie'
    
    // Server-Side
    cookies(context)['next-auth.session-token']
    // Client-side
    Cookies.get('next-auth.session-token')
    

    现在我们只需要弄清楚如何保存我的 API 提供的 JWT 令牌,而不是使用 next-auth 生成的令牌。

    然后我们将能够在后端 API 中重新激活签名验证。

    你可以关注here的话题

    【讨论】:

      猜你喜欢
      • 2021-09-06
      • 2021-05-26
      • 2018-07-11
      • 2018-02-17
      • 2021-12-09
      • 1970-01-01
      • 2023-01-07
      • 2023-02-05
      • 2022-12-30
      相关资源
      最近更新 更多