使用 Next.js 和 Auth0 实现身份验证

阅读时长 6 分钟读完

在 Web 开发中,身份验证是一个非常重要的话题。它可以确保用户只能访问他们有权访问的内容,并保护您的应用程序免受未经授权的访问和攻击。

在本文中,我们将介绍如何使用 Next.js 和 Auth0 实现身份验证。Next.js 是一个流行的 React 框架,提供了服务器端渲染和静态生成等功能。Auth0 是一个身份验证和授权平台,可以轻松地添加身份验证到您的应用程序中。

准备工作

在开始之前,您需要一个 Auth0 账户。如果您还没有一个,请注册一个。在您的 Auth0 仪表板中创建一个新的应用程序,并选择“Regular Web Applications”作为应用程序类型。

在您的应用程序设置中,将“Allowed Callback URLs”和“Allowed Logout URLs”设置为您的 Next.js 应用程序的 URL。例如,如果您的 Next.js 应用程序在本地运行并使用端口号 3000,则将这些 URL 设置为“http://localhost:3000/callback”和“http://localhost:3000”。

接下来,您需要安装 Auth0 的 JavaScript SDK。在您的 Next.js 应用程序中,运行以下命令:

实现身份验证

现在,让我们开始实现身份验证。

首先,我们需要在客户端中实例化 Auth0。在您的 Next.js 页面中,添加以下代码:

-- -------------------- ---- -------
------ ----- ---- -----------

----- ---- - --- ---------------
  ------- --------------------
  --------- -----------------------
  ------------ --------------------
  ------------- ------ ----------
  ------ ------- ------- -------
---

请注意,您需要将“YOUR_AUTH0_DOMAIN”和“YOUR_AUTH0_CLIENT_ID”替换为您的 Auth0 仪表板中应用程序的域和客户端 ID。您还需要将“YOUR_CALLBACK_URL”替换为您的 Next.js 应用程序的回调 URL。

接下来,我们需要添加一个登录按钮。在您的 Next.js 页面中,添加以下代码:

当用户单击此按钮时,将启动 Auth0 登录流程。

现在,让我们添加一个回调页面,以处理 Auth0 的响应。在您的 Next.js 页面中,添加以下代码:

-- -------------------- ---- -------
------ ------ - --------- - ---- --------

----- -------- - -- -- -
  ------------ -- -
    -------------------- ----------- -- -
      -- ----------- -- ---------------------- -- ------------------- -
        -- ---- ------ -- ----- -------
        ------------------------------------ ------------------------
        -------------------------------- --------------------
        -- -------- -- ---- ----
        -------------------- - ----
      - ---- -- ----- -
        -------------------
      -
    ---
  -- ----

  ------ ------------------
--

------ ------- ---------

当 Auth0 完成身份验证并将用户重定向到回调 URL 时,此页面将解析 URL 中的哈希值,并将访问令牌和 ID 令牌保存到本地存储中。然后,它将重定向到主页。

现在,我们已经完成了身份验证。让我们看看如何保护您的应用程序中的受保护路由。

保护路由

在您的 Next.js 应用程序中,您可以使用“getInitialProps”方法来检查用户是否已经登录。在您的受保护页面中,添加以下代码:

-- -------------------- ---- -------
------ ----- ---- --------
------ ------ ---- --------------

----- ------------- - -- -- -
  ----- ----------- - -------------------------------------
  ----- ------- - ---------------------------------

  -- ------------- -- --------- -
    -- -------- -- ----- ----
    -------------------------
    ------ -----
  -

  -- ------ --------- -------
  ------ --------- -----------
--

----------------------------- - -- ---- --- -- -- -
  -- ---- -- -------------------- -
    -- -------- -- ----- ----
    ------------------ - --------- -------- ---
    ----------
  -

  ------ ---
--

------ ------- --------------

此页面将检查本地存储中是否存在访问令牌和 ID 令牌。如果没有,则重定向到登录页面。否则,它将呈现受保护的内容。

请注意,我们还添加了一个“getInitialProps”方法,以确保用户已经登录。如果用户没有登录,则将重定向到登录页面。

结论

在本文中,我们介绍了如何使用 Next.js 和 Auth0 实现身份验证。我们学习了如何在客户端中实例化 Auth0、如何处理登录响应、如何保护受保护路由,并提供了示例代码。

身份验证是一个复杂的主题,但是使用 Auth0,我们可以轻松地将身份验证添加到我们的应用程序中。如果您还没有使用 Auth0,请尝试一下,它会让您的开发工作更加容易和愉快。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67443896c22b09372b0faa13

纠错
反馈