
身份验证是 *** 应用程序的一个重要方面,它可以确保只有授权用户才能访问特定资源或执行特定操作。本文将探讨如何使用 Auth0(一个功能强大的身份验证和授权平台)为 应用程序添加身份验证功能。
是一个多功能、灵活的平台,可为您的应用程序提供身份验证和授权服务。无论您是在构建 *** 应用程序、移动应用程序还是其他任何应用程序,都可以在任何地方集成 auth0。它支持各种身份验证 *** ,包括传统的电子邮件和密码登录、社交登录和多因素身份验证。Auth0 身份验证平台还可根据不同的项目需求和要求定制登录服务。
让我们从建立 Auth0 账户开始我们的示例。为此,请访问 Auth0 网站并创建一个新的免费账户。首先访问 。点击注册按钮,注册一个新账户。

登录后,导航至 Auth0 控制面板。以下是 Auth0 控制面板的外观:

在 Auth0 控制面板中,点击 “Create Application”。这将允许我们创建一个新的 Auth0 应用程序。

现在选择 Regular Web Applications 作为应用程序类型。Next *** 属于常规 *** 应用类型,因为它使用传统的重定向。最后,点击 “Create”。

导航至 “Settings” 选项卡,记下 client ID 和 Client Secret ,以便日后在项目中使用。在Auth0中创建的每个应用程序都会分配一个字母数字客户端 ID,该 ID 仅为您的应用程序独有,将用于通过 SDK 调用Auth0 API。您还将获得一个唯一的域 URL,用于访问 Auth0 服务。

太好了!我们完成了 Auth0 账户的设置。是时候将它集成到我们的下一个项目中了。
首先,我们将创建一个新的 Next.js 项目,以便进一步将 Auth0 集成到我们的应用程序中。要创建 Next 应用程序,请使用以下命令:
在深入了解 Auth0 集成之前,让我们先建立一个 Next.js 项目。
step 1. 创建新的 Next.js 应用程序 要创建新的 next.js 项目,请确保已安装 Node.js,然后运行以下命令:
npx create-next-app mynextjs cd mynextjs
注:为演示本文,我将使用 作为默认语言,项目结构如下:

现在我们已经创建了下一个项目,让我们把 Auth0 整合到其中。
Step 2. 安装必要的依赖项 要在 Next.js 应用程序中集成 Auth0,我们需要安装 Auth0 的依赖项(SDK)。在项目目录下运行以下命令安装 SDK:
npm install @auth0/nextjs-auth0 next-auth
Step 3. 在 Next.js 项目中设置 Auth0 SDK 在 Next.js 项目中设置 Auth0 SDK 前往 /pages/ ,打开 _app.tsx 文件并添加以下代
// pages/_app.tsx
import "@/styles/globals.css";
import type { AppProps } from "next/app";
import { UserProvider } from "@auth0/nextjs-auth0/client";
export default function App({ Component, pageProps }: AppProps) {
return (
<UserProvider>
<Component {...pageProps} />
</UserProvider>
);
}
Step 4. 配置 Auth0 SDK 下一步是在本地环境文件中配置和添加一些细节,如 AUTH0_SECRET, AUTH0_CLIENT_ID, AUTH0_CLIENT_SECRET, AUTH0_BASE_URL, 和 AUTH0_ISSUER_BASE_URL 。首先,在根目录下新建一个 .env.local 文件,并添加以下内容:
AUTH0_SECRET=jd *** fjsdbjfbdsgfnmdsfbgfnd *** fgmnbsdfgdfbggjh AUTH0_BASE_URL=http://localhost:3000 AUTH0_ISSUER_BASE_URL='https://yourdomainfromauth0.us.auth0.com' AUTH0_CLIENT_ID=add_your_client_id AUTH0_CLIENT_SECRET=add_your_client_secret
AUTH0_SECRET:这是应用程序在发出请求时用于向 Auth0 验证身份的机密信息。你可以在命令行中使用 openssl rand -hex 32 创建一个。AUTH0_BASE_URL:这是应用程序的基础 URL。如果在 localhost 上运行项目,则为 http://localhost:3000。AUTH0_ISSUER_BASE_URL:这是 Auth0 授权服务器的发行方 URL。你可以在域设置中找到它。AUTH0_CLIENT_ID:这是 Auth0 应用程序的客户端 ID。AUTH0_CLIENT_SECRET:Auth0 应用程序的客户机密文。在 Next.js 中集成 Auth0 后,让我们创建登录和注销组件并处理用户身份验证状态。
让我们开始为使用身份验证的应用程序构建用户界面。前往 /pages/index.tsx 并添加以下代码:
// pages/index.tsx
import React from "react";
import { useUser } from "@auth0/nextjs-auth0/client";
function index() {
const { user, error, isLoading } = useUser();
if (isLoading) return <div>Loading...</div>;
if (error) return <div>{error.message}</div>;
if (user) {
return (
<div className="max-w-md mx-auto bg-white rounded-md overflow-hidden shadow-md p-6">
<h2 className="text-2xl font-semibold mb-4">
Welcome, <span className="text-blue-700">{user.name}</span>!
</h2>
<p className="text-gray-600 mb-4">
You have successfully logged in using the Auth0 authentication system.
</p>
<a
className="bg-red-500 hover:bg-red-600 text-white py-2 px-4 rounded"
href="/api/auth/logout"
>
Logout
</a>
</div>
);
}
return (
<div className="flex flex-col gap-10 items-center p-10">
<h1 className="text-3xl font-bold">Auth0 authentication in Next.js</h1>
<a
href="/api/auth/login"
className="bg-blue-400 text-white p-4 w-20 h-14 text-center rounded-md"
>
Login
</a>
</div>
);
}
export default index;
在上面的代码中,我们为应用程序创建了主界面。为了获取用户数据,我们使用条件语句呈现登录和注销组件。如果用户已通过身份验证,则会显示用户详细信息,如用户 name、信息和 Logout 按钮。如果没有,用户将看到 Login 按钮,以便在下一个流程中进行身份验证。最后,我们使用 Tailwind CSS 来添加样式。
所提供的 index.tsx 文件已经使用 useUser 钩子处理了用户验证状态。
实施完成后,让我们添加一些回调来处理身份验证流程。但在处理回调或编写任何代码之前,我们有必要了解我们到底要做什么,以及身份验证流程是如何流动的。
使用 Auth0 进行身份验证涉及多个步骤,包括重定向到 Auth0 进行登录、身份验证回调以及处理身份验证状态。以下是简要概述:

本图展示了用户与集成了 Auth0 的 Next.js 应用程序交互时的无缝身份验证流程。了解这一流程对于更清晰地掌握 Auth0 身份验证过程至关重要。
要实现回调路由,请转到 pages/api/auth/ ,创建一个名为 [auth0].ts 的文件,并添加以下代码:
// pages/api/auth/[auth0].ts
import { handleAuth } from "@auth0/nextjs-auth0";
export default handleAuth();
上述文件中包含 SDK 的 handleAuth *** ,该 *** 将负责所有用于处理身份验证回调的路由。添加上述代码后,SDK 将自动从 Node.js 进程环境中读取和配置这些值。现在,应用程序已经完成,可以运行了。
要预览最终输出,请在终端运行以下命令启动开发服务器:
npm run dev
在浏览器中访问 http://localhost:3000,查看您的 Next.js 应用程序。
登录前

Auth0 验证

登录后

让我们为基于角色的访问控制配置 Auth0,并根据用户角色限制对某些路由的访问。这一步是可选的,但如果你正在构建一个有多个成员的应用程序,你可以执行这一步。
此步骤包括在 Auth0 面板中设置角色和权限。
第 1 步:导航至 Auth0 控制面板:,并使用凭据登录。
第 2 步:添加新用户


第 3 步:创建角色

按照上述步骤,我们可以创建多个具有不同角色和权限的用户。
要限制对特定页面的访问,可在 @auth0/nextjs-auth0 的高阶组件中使用 withPageAuthRequired 函数。只需修改 [auth0].ts 文件如下,即可轻松实现这一功能:
// pages/api/auth/[auth0].ts
import { handleAuth, withPageAuthRequired } from "@auth0/nextjs-auth0";
export default handleAuth({
async callback(request, response) {
try {
await withPageAuthRequired({ roles: ['admin'] })(request, response);
} catch (err) {
res.status(err.status || 500).end(err.message);
}
},
});
通过添加上述代码,拥有适当权限的用户可以不受限制地访问特定路由,而其他用户则会受到限制。
在本文中,我们了解了如何使用 Auth0 对 Next.js 应用程序进行身份验证。我们看到了将 Auth0 服务集成到应用程序中的逐步实现过程,以及如何在 Next 应用程序中处理路由回调。通过利用 Auth0 身份验证系统的强大功能,您可以为用户提供无缝体验。
谁在尝试访问某些网站时没有遇到过更新Java的请求? 虽然许多人通过交互式网站功能熟悉Java,但用户可能不太熟悉JavaScript——或者,实际上,他们可能错误地认为两者是相同的。 在本文中,我们将讨论JavaScript 是什么以及Java和JavaScript之间的区别。然后我们将概...
Linux面板环境安装,主要支持LNMP和LAMP、Tomcat、node.js。不过对于大部分站长来说,主要是LNMP和LAMP两个环境的安装。 LNMP和LAMP两个环境的最大区别是,前者采用Nginx作为Web服务器,后者则采用Apache作为Web服务器。(选择哪个作为您的Web服务器,可...
宝塔面板的计划任务,主要用于安排和管理需要定时执行的任务,如备份、内存清理等。其实对于大部分站长来说,主要使用该板块的备份网站、备份数据库及释放内存的三个定时任务计划。 Shell脚本的添加 输入任务名称,选择执行周期,输入执行的脚本内容。 注意事项: 输入脚本内容...
Node.js和PHP是Web开发工作中常用的两种基本Web技术。两者都为服务器端开发做出了贡献,Node.js甚至同时服务于客户端和服务器端开发。 PHP已经为开发人员服务了近3年,现在它为78%的网络提供支持。相比之下,Node.js相对较新,但扩展速度非常快,由于其全栈开发能力而成为流行...
无服务器计算是一种基于云的执行模型,可以将应用程序作为服务托管,而无需维护服务器。 服务提供商维护服务器上的资源分配,并根据实际使用情况向用户收费。焦点转移到一个人正在创建的核心应用程序上,基础设施完全由服务提供商处理。无服务器计算也称为功能即服务 (FaaS)。 换句话说,Serverle...
薪水可能是某些人的禁忌话题,但如果您是WordPress开发人员,或者正在考虑从事WordPress开发工作,那么了解人们的收入对于最大化您自己的赚钱能力至关重要。 所以让我们谈谈这个秘密——让我们谈谈WordPress开发人员的平均工资。这样,您将确切地知道自己的价值(以及如何赚取更多)。...