@alpha018/nestjs-firebase-auth

中文文档
4.0.0发布于 2026/10/24MITTypeScriptCommonJS构建来源已验证近 30 天下载 2053

网点JS Firebase 库和基于角色的守护器,用于具有一些实用功能的认证

中文使用文档
文档目录20 节
  1. NestJS 使用Firebase admin SDK的Firebase Auth护照策略,其中包括用于使用的Fire…
  2. 目录
  3. 安装
  4. 使用量
  5. 导入模块
  6. 参数选项
  7. Auth 守护无作用验证
  8. Auth 守护与角色验证
  9. 基于索赔的授权(良好)
  10. 具有方法级授权的主计长级认证
  11. 补充资料
  12. 移徙指南(v2.0.0)
  13. 移徙指南(v1.9.x)
  14. 1. 替换 RolesGuard 与 @Roles
  15. 2. 替换 UseGuards(FirebaseGuard) 与 @Auth
  16. 为什么移民?
  17. 文档
  18. 资源
  19. 保持联系
  20. 许可证

NestJS 消防基地管理局

NestJS 使用Firebase admin SDK的Firebase Auth护照策略,其中包括用于使用的Firebase SDK库.

请检查wiki的完整文档和指南!

目录

v2.0.0中的突破变化: 现在需要的最小节点.js版本 22.12 对,则 捆绑的消防基地管理员SDK已移至 页:1见 v 2.0.0 移徙指南 升级前.

安装

npm i @alpha018/nestjs-firebase-auth firebase-admin

使用量

导入模块

要在应用程序中使用 Firebase 认证,请将模块导入您的主模块 .

import { FirebaseAdminModule } from '@alpha018/nestjs-firebase-auth';

@Module({
  imports: [
    ...
      FirebaseAdminModule.forRootAsync({
        imports: [ConfigModule],
        useFactory: (configService: ConfigService) => ({
          // SELECT ONLY ONE: BASE64 OR OPTIONS (Firebase Options)!
          base64: configService.get('FIREBASE_SERVICE_ACCOUNT_BASE64'), // Base64 encoded service account JSON string
          options: {}, // Use this if not using base64
          auth: {
            config: {
              extractor: ExtractJwt.fromAuthHeaderAsBearerToken(), // Choose your extractor from the Passport library
              checkRevoked: true, // Set to true if you want to check for revoked Firebase tokens
              validateRole: true, // Set to true if you want to validate user roles
              useLocalDecode: true, // Set to true to resolve roles and claims locally from the token, without a Firebase call
              rolesClaimKey: 'user_roles' // Set the name of the key within the Firebase custom claims that stores user roles
            },
          },
        }),
        inject: [ConfigService],
      }),
    ...
  ],
})

参数选项

参数类型需求说明
base64string对*Base64编码服务账户JSON字符串. 需要时,如果 options 未提供.
optionsobject对*Firebase Admin SDK 配置选项. 需要时,如果 base64 未提供.
auth.config.extractorfunction可选护照库中的自定义提取器功能,用于从请求中提取令牌.
auth.config.checkRevokedboolean可选设定为 true 以检查Firebase标志是否已被撤销。 默认为 false。 。 。 .
auth.config.validateRoleboolean可选设定为 true 使用 Firebase 自定义要求验证用户角色。 默认为 false。 。 。 .
auth.config.useLocalDecodeboolean可选设定为 true 以已经从 JWT 符号解码的值验证角色和索赔,而不是从 Firebase 取出。 默认为 false。 。 。 . 说明: 更新债权时,以前发行的令牌可能仍然含有过时的值并仍然有效.
auth.config.useLocalRolesboolean可选设定为 true 在 JWT 标志内使用本地自定义要求验证用户角色。 默认为 false。 。 。 . 说明: 更新索赔要求时,以前发行的代币可能仍然包含过时的角色并仍然有效. (折旧、使用) useLocalDecode(中文(简体) )
auth.config.rolesClaimKeystring可选Firebase自定义中的密钥名称声称存储了用户角色. 默认为 'roles'。这使得您可以自定义自定义对象中的角色属性名称.
auth.config.claimsClaimKeystring可选Firebase自定义中的密钥名称声称存储有精细纹饰的索赔. 默认为 'permissions'。 。 。 . 说明: Firebase 封顶所有自定义索赔的合并大小, 序列化后为 ~ 1 000 字节, 共享 rolesClaimKey, (中文(简体) ), claimsClaimKey还有其他东西存放在那里。 由于许多索赔涉及多个领域,因此使用简短的索赔代码而不是冗长的描述性字符串来保留在该预算之下.

Auth 守护无作用验证

为了在不验证用户角色的情况下保护一个端点,使用Auth Guard来确保Firebase用户的令牌是有效的.

import { Auth, FirebaseProvider } from '@alpha018/nestjs-firebase-auth';

export class AppController {
  constructor(
    private readonly firebaseProvider: FirebaseProvider,
  ) {}

  @Auth() // This line protects your endpoint with Firebase Auth
  @Get()
  mainFunction() {
    return 'Hello World';
  }
}

Auth 守护与角色验证

为了执行基于角色的访问控制,需要在Firebase设置基于角色的自定义索赔. 以下是您如何为用户设定角色 setClaimsRoleBase数字 :

import { FirebaseProvider } from '@alpha018/nestjs-firebase-auth';

enum Roles {
  ADMIN,
  USER,
}

@Controller('')
export class AppController {
  constructor(
    private readonly firebaseProvider: FirebaseProvider,
  ) {}

  @Get()
  async setUserRoles() {
    await this.firebaseProvider.setClaimsRoleBase<Roles>(
      'some-firebase-uid', // The UID of the user you want to set roles for
      [Roles.ADMIN]
    );
    return { status: 'ok' }
  }
}

然后,使用带有角色验证的Auth Guard来检查用户是否有访问端点的必要权限:

import { Roles } from '@alpha018/nestjs-firebase-auth';
enum Roles {
  ADMIN,
  USER,
}

@Controller('')
export class AppController {
  constructor(
    private readonly firebaseProvider: FirebaseProvider,
  ) {}

  @Roles(Roles.ADMIN, Roles.USER) // This line checks the custom claims of the Firebase user AND ensures the user is authenticated (implicitly applies FirebaseGuard)
  @Get()
  mainFunction() {
    return 'Hello World';
  }
}

基于索赔的授权(良好)

@RequireClaims 检查访问比角色更细:用户必须持有 每个 所列索赔,没有 只有一个 它读取一个单独的自定义要求密钥( :permissions 默认情况下,可通过 claimsClaimKey) (中文(简体) ).

import { FirebaseProvider } from '@alpha018/nestjs-firebase-auth';

enum UsersClaim {
  READ = 'users:read',
  WRITE = 'users:write',
}

@Controller('')
export class AppController {
  constructor(
    private readonly firebaseProvider: FirebaseProvider,
  ) {}

  @Get()
  async setUserClaims() {
    await this.firebaseProvider.setClaimsPermissionBase<UsersClaim>(
      'some-firebase-uid', // The UID of the user you want to set claims for
      [UsersClaim.READ, UsersClaim.WRITE],
    );
    return { status: 'ok' }
  }
}

然后,使用 @RequireClaims 以检查用户是否持有访问端点所需的所有要求:

import { RequireClaims } from '@alpha018/nestjs-firebase-auth';

enum UsersClaim {
  READ = 'users:read',
  WRITE = 'users:write',
}

@Controller('')
export class AppController {
  @RequireClaims(UsersClaim.READ, UsersClaim.WRITE) // Requires BOTH claims AND ensures the user is authenticated (implicitly applies FirebaseGuard)
  @Get()
  mainFunction() {
    return 'Hello World';
  }
}

@RequireClaims 属于一般性质,因此来自不同领域的债权(UsersClaim, (中文(简体) ), InvoicesClaim, (中文(简体) ), ReportsClaim,.)可以共存,作为普通字符串在同一自定义请求数组中. 也结合了 在单一路线上发挥作用和制定政策 @Auth({ roles, claims, policies })。 。 。 .

具有方法级授权的主计长级认证

您可以使用 @Auth() ,然后使用 @Roles()。该库被优化,以防止在此情况下进行冗余符号验证.

import { Auth, Roles } from '@alpha018/nestjs-firebase-auth';

enum AppRoles {
  ADMIN,
  USER,
}

@Auth() // Protects all routes in this controller (ensures valid token)
@Controller('users')
export class UsersController {
  
  @Get('profile')
  getProfile() {
    // Accessible by any authenticated user
    return { status: 'ok' };
  }

  @Roles(AppRoles.ADMIN) // Adds specific authorization requirement
  @Get('admin-dashboard')
  getAdminDashboard() {
    // Accessible ONLY by authenticated users with ADMIN role
    return { status: 'secure' };
  }
}

补充资料

要在受保护的路由中检索已解码的ID Token和角色要求,请使用 @FirebaseUser 财务报告和审定财务报表 @FirebaseRolesClaims 参数装饰.

import {
  FirebaseProvider,
  FirebaseUser,
  FirebaseRolesClaims,
  Roles,
} from '@alpha018/nestjs-firebase-auth';

import { DecodedIdToken } from 'firebase-admin/auth';

enum Roles {
  ADMIN,
  USER,
}

@Controller('')
export class AppController {
  constructor(
    private readonly firebaseProvider: FirebaseProvider,
  ) {}

  @Roles(Roles.ADMIN, Roles.USER)
  @Get()
  async mainFunction(
    @FirebaseUser() user: DecodedIdToken,
    @FirebaseRolesClaims() claims: Roles[],
  ) {
    return {
      user,
      claims
    };
  }
}

差异 @FirebaseUser 财务报告和审定财务报表 @FirebaseRolesClaims

说明: 从版本开始 >=1.7.x,这两个装饰器明确分开,以避免混淆(见 问题11:

  • @FirebaseUser() • 返回 已完全解码的令牌 (单位:千美元)DecodedIdToken) (中文(简体) ).
  • @FirebaseRolesClaims() - 仅返回 自定义角色索赔 (作用/许可)为用户定义.

这种分离确保了开发者既可以独立访问原始的Firebase用户对象,也可以独立访问角色/要求信息.

移徙指南(v2.0.0)

v2.0.0 将捆绑的 Firebase 管理器 SDK 从 v13 升级到 页:1。这个图书馆的 API 是 不变; 断开变化来自 SDK :

变动需要采取的行动
最小节点Js现在 22.12更新运行时间——节点20是寿命结束
auth 名称空格从 firebase-admin 根号导入 DecodedIdToken 从 firebase-admin/auth

包括杰斯特配置在内的全部细节都在 移徙指南。 。 。 .

移徙指南(v1.9.x)

为了提高语义上的清晰度和开发者的经验,对警卫的直接使用被贬低,更倾向于描述性的装饰. 截止 v3.0.0, (中文(简体) ), RolesGuard 与公众 FirebaseGuard 已完全去除出口——见 移徙指南。 。 。 .

1. 替换 RolesGuard 与 @Roles

在 v3. 0.0 中被删除 :

@UseGuards(FirebaseGuard) // or alone if global
@RolesGuard(Roles.ADMIN)

新途径 :

@Roles(Roles.ADMIN)

说明: @Roles 自动应用认证守护.


2. 替换 UseGuards(FirebaseGuard) 与 @Auth

在 v3. 0.0 中被删除 :

@UseGuards(FirebaseGuard)

新途径 :

@Auth()

为什么移民?

  • 更好的可读性数字 : @Auth 对 @UseGuards(FirebaseGuard) 明确表明意图.
  • 最佳业绩: 新的装饰器使用一个最优化的后卫来防止在编组控制器和方法时进行冗余的符号验证检查.

文档

欲了解更详细的情况、指南和先进实例,请访问 工程维基。 。 。 .

资源

请检查date=中的日期值 (帮助) NestJS工作时可能有用的资源:

保持联系

许可证

巢为 麻省理工学院执照。 。 。 .

版本与发布记录

@alpha018/nestjs-firebase-auth 共发布 20 个版本,首次发布于 2024/09/03;过去 12 个月发布了 9 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
4.0.0latest2026/10/2414 天前
3.0.02026/08/262 个月前
2.0.12026/08/172 个月前
2.0.02026/07/213 个月前
1.11.02026/03/078 个月前
1.10.02026/01/0410 个月前

关于 @alpha018/nestjs-firebase-auth 的常见问题

@alpha018/nestjs-firebase-auth 是什么?

网点JS Firebase 库和基于角色的守护器,用于具有一些实用功能的认证

如何安装 @alpha018/nestjs-firebase-auth?

在项目目录运行 npm install @alpha018/nestjs-firebase-auth,或使用 pnpm add / yarn add / bun add。

@alpha018/nestjs-firebase-auth 支持 TypeScript 吗?

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

@alpha018/nestjs-firebase-auth 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@alpha018/nestjs-firebase-auth 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.12.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@alpha018/nestjs-firebase-auth 可以商用吗?

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

@alpha018/nestjs-firebase-auth 的下载量有多少?

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

@alpha018/nestjs-firebase-auth 还在维护吗?

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