@auth0/auth0-nuxt

中文文档
1.3.0发布于 2026/10/28MITTypeScriptES Module构建来源已验证近 30 天下载 1.1万

在 JavaScript 运行时间为 Nuxt 应用程序认证 SDK

中文使用文档
文档目录14 节
  1. 文档
  2. 开始
  3. 1. 安装SDK
  4. 2. 登记 Auth0 努克特模块
  5. 3. 添加登录和停用
  6. 4. 保护路线
  7. 5. 控制安全部门改革用户的写作
  8. 6. 请求调取一个调取API
  9. 7. 钥匙
  10. 反馈
  11. 捐款
  12. 提出问题
  13. 脆弱性报告
  14. 什么是奥特?

Auth0-Nuxt

Auth0 Nuxt SDK是一个用于执行Nuxt应用程序中的用户认证的库.

Stage: GA Release Release Downloads License

📚 文档 - 🚀 开始 - 💬 反馈

文档

  • 实例 - 不同用法的例子.
  • Docs 站点 - 探索我们的文件网站 了解更多关于Auth0.

开始

1. 安装SDK

npm i @auth0/auth0-nuxt

这个库需要Node.js 20 LTS和较新的LTS版本.

2. 登记 Auth0 努克特模块

Auth0 Nuxt 模块在 nuxt.config.js 文件,连同运行时配置.

{
  modules: ['@auth0/auth0-nuxt'],
  runtimeConfig: {
    auth0: {
      domain: '<AUTH0_DOMAIN>', // is overridden by NUXT_AUTH0_DOMAIN environment variable
      clientId: '<AUTH0_CLIENT_ID>', // is overridden by NUXT_AUTH0_CLIENT_ID environment variable
      clientSecret: '<AUTH0_CLIENT_SECRET>', // is overridden by NUXT_AUTH0_CLIENT_SECRET environment variable
      sessionSecret: '<SESSION_SECRET>', // is overridden by NUXT_AUTH0_SESSION_SECRET environment variable
      appBaseUrl: '<APP_BASE_URL>', // is overridden by NUXT_AUTH0_APP_BASE_URL environment variable
    },
  },
}

这个 AUTH0_DOMAIN, (中文(简体) ), AUTH0_CLIENT_ID,以及 AUTH0_CLIENT_SECRET 可以在创建应用程序后从 Auth0 Dashboard 获得. 此应用程序必须是常规 Web 应用程序 .

这个 SESSION_SECRET 是用于加密会话 cookie 的密钥。 您可以使用 opensl 生成一个秘密 :

openssl rand -hex 64

这个 APP_BASE_URL 您的应用程序正在运行的 URL 。 当本地开发时,这最常见的是http://localhost:30.

[大
您需要在 Auth0 应用程序中通过 Auth0 剪贴板数字 :

  • 添加 http://localhost:3000/auth/callback 名单 允许召回 URL
  • 添加 http://localhost:3000 名单 允许登录 URL

路线

Nuxt Web 应用程序的 SDK 挂载了 5 主要路线 :

  1. /auth/login: 用户将被重定向启动认证交易的登录路径. 支持添加一个 returnTo 登录后返回特定 URL 的查询字符串参数 .
  2. /auth/logout: 必须添加到您的 Auth0 应用程序允许的日志 URL 的日志路径
  3. /auth/callback: 必须在 Auth0 应用程序允许的回调 URL 中添加的回调路由
  4. /auth/backchannel-logout: 将接收到一个 logout_token 配置时 后通道登录 启动发生
  5. /auth/profile: 返回当前用户对浏览器的要求, 已服务 Cache-Control: no-store。这就是流行 useUser() 选择退出 SSR 用户写入的路由(参见 第5节) (中文(简体) ).

要禁用此行为, 您可以设置 mountRoutes 选项到 false 当注册模块时( 默认为真实) :

modules: [['@auth0/auth0-nuxt', { mountRoutes: false }]]

或者,如果想要更改用于挂起的端点路径,可以指定 routes 选项 :

modules: [['@auth0/auth0-nuxt', { 
  routes: { 
    login: '/custom-auth/login',
    logout: '/custom-auth/logout',
    callback: '/custom-auth/callback',
    backchannelLogout: '/custom-auth/backchannel-logout',
    profile: '/custom-auth/profile',
  }
}]]

3. 添加登录和停用

当使用内置挂载路由时,用户可以被重定向到 /auth/login 启动登录流程,并 /auth/logout 以登录.

<a href="/auth/logout">Log out</a>
<a href="/auth/login">Log in</a>

需要的时候,也可以通过 returnTo 查询字符串参数到登录路径,以便在登录成功后将用户重定向到特定的URL.

在不使用内置路线时,您要给SDK打电话 startInteractiveLogin(), (中文(简体) ), completeInteractiveLogin() 财务报告和审定财务报表 logout() 方法通过 useAuth0() 可编译, 可在您的 Nuxt 应用程序的服务器侧上下文中获取 :

// server/routes/auth/login.js
export default defineEventHandler(async (event) => {
  const auth0Client = useAuth0(event);
  const authorizationUrl = await auth0Client.startInteractiveLogin(
    {
      authorizationParams: {
        // Custom URL to redirect back to after login to handle the callback.
        // Make sure to configure the URL in the Auth0 Dashboard as an Allowed Callback URL.
        redirect_uri: 'http://localhost:3000/auth/callback',
      }
    }
  );

  sendRedirect(event, authorizationUrl.href);
});

// server/routes/auth/callback.js
export default defineEventHandler(async (event) => {
  const auth0Client = useAuth0(event);
  await auth0Client.completeInteractiveLogin(
    new URL(event.node.req.url as string, 'http://localhost:3000')
  );

  sendRedirect(event, 'https://localhost:3000');
});

// server/routes/auth/logout.js
export default defineEventHandler(async (event) => {
  const auth0Client = useAuth0(event);
  const returnTo = 'https://localhost:3000';
  const logoutUrl = await auth0Client.logout(
    { returnTo: returnTo.toString() }
  );

  sendRedirect(event, logoutUrl.href);
});

有了这些,你可以打电话 auth/login 财务报告和审定财务报表 auth/logout 以登录应用程序中的用户.

4. 保护路线

4.1 路由中软件

为了保护Nuxt路线,你可以使用SDK的 useUser() 自定义路由中间软件中的可相容方法. 这将检查是否有用户, 如果没有, 则将其重定向到登录页面 :

// middleware/auth.ts
import { useUser } from '@auth0/auth0-nuxt';

export default defineNuxtRouteMiddleware((to, from) => {
  const session = useUser();

  if (!session.value) {
    return navigateTo(`/auth/login?returnTo=${to.path}`);
  }
});

[入声]
您可以用任何您想要的检查来替换上面的检查, 例如检查特定的用户请求 .

有了中间的软件,你可以保护路线 通过添加到 middleware 相应的 Nuxt 路由的属性 :

<script setup>
definePageMeta({
  middleware: [ 'auth' ],
});
</script>

4.2 服务器中间软件

此外,您还可以使用服务器中间软件,通过使用该软件来保护服务器端已渲染的路由 useAuth0 服务器侧可堆放 。 此中间软件将检查用户是否被认证, 如果不是, 则将其重定向到登录页面 :

// server/middleware/auth.ts
export default defineEventHandler(async (event) => {
  const url = getRequestURL(event);

  if (url.pathname === '/private') {
    const auth0Client = useAuth0(event);
    const session = await auth0Client.getSession();
    if (!session) {
      return sendRedirect(event, `/auth/login?returnTo=${url.pathname}`);
    }
  }
});

[大
上述例子既是为了通过会话保护路线,也不是为了使用无记名标志的API路线.

5. 控制安全部门改革用户的写作

useUser() 由 useState,将 Nuxt 序列化为 __NUXT__ 服务器上 HTML 的有效载荷 。 如果从共享缓存中提供HTML,则可以将一个访客的债权交付给另一个.

此 SDK 无法检测您的响应是如何被缓存的 . Cache-Control 按请求时间设置 setHeader并按你的CDN进行缓存, Netlify-CDN-Cache-Control)是两者都看不见的. 如果你从共享缓存中提供认证的路径,你必须自己选择这些路径. 默认是 ssrUser: true,所以一个缓存的认证路径没有 ssrUser: false 规则泄露. 默认是 true 保持不破烂.

按路线规则选择出线 :

// nuxt.config.ts
export default defineNuxtConfig({
  routeRules: {
    '/blog/**': { swr: 3600, auth0: { ssrUser: false } },
  },
});

或设定每条路由的默认值,并选择单个路由返回:

// nuxt.config.ts
export default defineNuxtConfig({
  auth0: { ssrUser: false },
  routeRules: {
    '/account': { auth0: { ssrUser: true } },
  },
});

一个路由规则总是胜过模块选项,它胜过内置默认 true。选择退出的路由使 HTML 和水合物匿名 useUser() 在浏览器中从 /auth/profile,则服务 Cache-Control: no-store。 。 。 .

[大 不保护选择的退出路径 useUser() 路由中间软件 第4.1节。 。 。 . 在选择的退出路径中, SSR 期间故意没有用户, 所以中间软件可以看到 session.value 即使是对登录用户来说也是空的,并重定向到 /auth/login. Auth0 然后将它们返回到同一个路径,这再次使得匿名——无限重定向回路.

用服务器中间软件保护这些路由 第4.2节 换句话说 它从H3活动中读取会议内容,而H3活动没有受到影响 ssrUser区别在于: ssrUser: false 删除用户从 生成的有效载荷,不是从会议.

Nuxt 不将模块的类型拉入您的 nuxt.config类型程序,用于自动完成 auth0 路由规则键,将此添加到 .d.ts 在您的项目中 :

declare module 'nitropack' {
  interface NitroRouteConfig {
    auth0?: { ssrUser?: boolean };
  }
}

declare module 'nitropack/types' {
  interface NitroRouteConfig {
    auth0?: { ssrUser?: boolean };
  }
}

export {};

该规则在运行时读取,无论是否键入.

客户端水合一次运行在app init上,而不是在每个导航上:SSR写给用户的插件是"无"(no-op;没有),被获取的用户会携带过后期导航. 这么说吧 ssrUser: false 控制缓存的 HTML 中哪些区域,而不是用户在运行中的应用程序中是否可见.

mountRoutes: false 不停止此请求: 客户端仍然获取配置路径, 而模块没有在此获取答案 。 自动挂载配置文件处理器, 或任何答题( a 404 或 call- all- page 的 HTML ) 都无要求, 插件忽略了它, 选择的退出路由保持匿名 。 完全不提出要求,设置 hydrateUser: false。 。 。 .

[尖叫声] 如果您按自己的路径挂载,请为这条路径添加一条规则:

routeRules: { '/your/profile/path': { cache: false } }

Nitro的处理器缓存由没有会话 cookie 的路径按键,所以像通配符 '/**': { swr: 60 } 将满足一个用户对下一个用户的要求。 SDK已经为自己的配置路径设置了此功能.

6. 请求调取一个调取API

如果您需要代表用户调用 API, 请指定 audience 参数用于注册插件。 这将使SDK在用户登录时为指定的受众请求访问令牌.

runtimeConfig: {
  auth0: {
    domain: '<AUTH0_DOMAIN>', // is overridden by NUXT_AUTH0_DOMAIN environment variable
    clientId: '<AUTH0_CLIENT_ID>', // is overridden by NUXT_AUTH0_CLIENT_ID environment variable
    clientSecret: '<AUTH0_CLIENT_SECRET>', // is overridden by NUXT_AUTH0_CLIENT_SECRET environment variable
    sessionSecret: '<SESSION_SECRET>', // is overridden by NUXT_AUTH0_SESSION_SECRET environment variable
    appBaseUrl: '<APP_BASE_URL>', // is overridden by NUXT_AUTH0_APP_BASE_URL environment variable
    audience: '<AUTH0_AUDIENCE>', // is overridden by NUXT_AUTH0_AUDIENCE environment variable
  },
}

这个 AUTH0_AUDIENCE 是您要调用的 API 的标识符。 您可以在 Auth0 仪表板的 API 部分中找到这个 .

通过使用 getAccessToken 使用服务器侧可替换 useAuth0数字 :

const auth0Client = useAuth0(event);
const accessTokenResult = await auth0Client.getAccessToken();
// You can now use `accessTokenResult.accessToken`

7. 钥匙

用户可以注册并登录密码(指纹,面部扫描或安全密钥)而不是密码,签注可以先用一次性代码验证电子邮件地址和电话号码. 模块没有为此挂起路径 。 您添加了三条呼叫的服务器路由 useAuth0(event).passkey因此,你自己的验证, 费率限制和机器人检查坐在他们面前:

const auth0 = useAuth0(event);

// 1. Start. Return `authnParamsPublicKey` to the browser, which runs `navigator.credentials.create()` or `.get()`.
const { authnParamsPublicKey, verificationRequired } = await auth0.passkey.startSignup({ email, realm });
// or, for a login: const { authnParamsPublicKey } = await auth0.passkey.startLogin({ realm });

// 2. Complete. The browser sends the credential (and the one-time codes) back: the SDK exchanges it for tokens and
//    writes the session.
await auth0.passkey.complete({ credential, verification });

密码 自定义域,该应用程序使用客户端保密方法与 密码 grant),以及与Passkey认证方法的数据库连接. 见 使用密码登录和签名 路线、处理错误和如何保护这些路线,以及 密码例应用 用于运行整个流量的一页.

反馈

捐款

我们赞赏反馈和对这次再投资的贡献! 在开始前,请阅读以下内容:

提出问题

请提供反馈或报告错误 提出我们的问题追踪器。 。 。 .

脆弱性报告

请不要在公共 GitHub 问题跟踪器上报告安全漏洞 。 这个 负责任的披露程序 详细说明披露安全问题的程序.

什么是奥特?

Auth0 Logo

Auth0是一个易于执行,可适应的认证和授权平台. 学习更多退房 为什么是Auth0?

这个项目根据麻省理工学院的许可证获得许可。 见 自由主义 需要更多信息的文件.

版本与发布记录

@auth0/auth0-nuxt 共发布 8 个版本,首次发布于 2025/10/16;过去 12 个月发布了 6 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.3.0latest2026/10/2810 天前
1.2.12026/10/0830 天前
1.2.02026/08/212 个月前
1.1.02026/04/146 个月前
1.0.12026/02/079 个月前
1.0.02026/01/239 个月前

其他发布通道:beta → 1.0.0-beta.1。

关于 @auth0/auth0-nuxt 的常见问题

@auth0/auth0-nuxt 是什么?

在 JavaScript 运行时间为 Nuxt 应用程序认证 SDK

如何安装 @auth0/auth0-nuxt?

在项目目录运行 npm install @auth0/auth0-nuxt,或使用 pnpm add / yarn add / bun add。

@auth0/auth0-nuxt 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@auth0/auth0-nuxt 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@auth0/auth0-nuxt 可以商用吗?

@auth0/auth0-nuxt 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@auth0/auth0-nuxt 的下载量有多少?

根据 npm 官方下载统计,@auth0/auth0-nuxt 在 2026/10/07 – 2026/11/05 这 30 天内被下载 10,809 次,日均约 360 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@auth0/auth0-nuxt 还在维护吗?

最新版本 1.3.0 发布于 2026/10/28(10 天前);至今共发布 8 个版本,其中过去 12 个月发布了 6 个;首次发布于 2025/10/16。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。