NextJS 身份验证与外部服务器

Web*_*man 3 javascript authentication jwt next.js

我正在 Nextjs 中使用身份验证,我想知道在 NextJS 中处理身份验证的最佳策略是什么?

这里我的服务结构:

在此处输入图片说明

如果我理解得很好,我必须在 NextJS 中处理服务器端渲染,所以我知道我必须将 cookie 从我的外部服务器放到我的 NextJS 客户端,然后处理服务器端渲染检查。为此,我假设我必须在 NextJS 服务器和其他服务之间创建连接。在深入研究该主题之前,我会与您讨论可用的可能性。NextJS auth 似乎是一个普通开发的主题。

任何提示都会很棒,谢谢

小智 9

我最近添加了一个带有 cookie auth示例,它解释了您在前端尝试执行的操作。

对于后端,除了用于呈现 Next.js 应用程序的服务器之外,您最好将 API 放在外部服务器中。该 API 将处理数据库和令牌创建业务。那么认证的基础是这样的:

  • 客户端POST向服务器发送带有用户名和密码的请求。
  • 服务器获取请求并根据接收到的数据生成令牌。
  • 如果验证数据一切顺利,服务器将使用令牌进行响应,例如,{ token: "secrettoken" }
  • 客户端接收令牌并将其保存在 cookie 中。/dashboard或者,/profile如果一切正常,您可以将用户重定向到或。
  • 在受限制的页面上,客户端将检查 cookie 是否存在,并可选择对服务器进行验证,您在getInitialProps. 如果 cookie 验证失败,您将用户重定向到其他地方。

我创建了一个小型库来抽象这个逻辑。

所以最后,你的 Next.js 应用程序不应该知道服务器中发生了什么,它只应该接收令牌,保存它,验证它,并在出现问题时重定向用户。

您希望如何在外部服务器上处理令牌创建取决于您。


tlm*_*tlm 1

查看线程。整个线程中有几个如何使用 JWT、OAuth 等进行身份验证的示例。您将看到这些示例正在使用getInitialProps,并且有几个示例始终使用 cookie 来提取身份验证令牌。

您必须编写一个自定义server.js文件,用于express.js通过路由请求提供令牌。我假设“外部服务器”是指使用 OAuth 或 OpenId 协议检索令牌的第三方身份验证器。如果是这样,您的说法是正确的,您需要从这些外部服务请求令牌(或身份验证机制),然后决定如何在自己的客户端中使用它们。getInitialProps一旦渲染到浏览器,您可能会在客户端中使用身份验证令牌来执行您需要执行的操作。

更多身份验证示例请参见此处——一个用于 firebase,另一个用于 Apollo。