Core · 使用插件 · 用户与认证

身份认证

提供的能力

@nocobase/app-plugin-authentication 将 Better Auth 接入应用,提供登录身份、会话、认证客户端和服务端认证中间件。它回答“当前是谁”;该用户能进行哪些操作由权限管理决定。

认证插件提供身份与会话机制,登录页面由应用维护,业务操作权限由授权插件决定。

使用场景与示例

示例:只允许受邀成员加入

  1. 在应用配置中关闭自行注册,保留需要的登录方式。
  2. 将应用注册入口与配置状态同步,不只隐藏一个按钮。
  3. 使用用户管理发送邀请,让新成员通过邀请页创建账号。
  4. 分别检查访客、已登录成员、被停用用户的页面和接口行为。

若使用内置密码找回邮件,启用 auth.passwordReset.enabled,配置应用公开地址和可投递的系统邮件渠道,再结合 usePasswordResetCapability() 展示入口;仅有邮箱密码登录,不代表找回邮件已经可用。应用也可以提供自己的 sendResetPassword 实现。跨域部署还需要正确配置可信来源,不能通过绕过请求来源检查解决登录问题。

开发提示词(交给当前应用目录中的 Coding Agent):

纯文本
请用身份认证插件将应用设为仅受邀成员加入。
沿用已有登录、会话和扩展配置,同时关闭服务端自行注册与对应页面入口。
如启用密码找回,先检查公开地址和通知邮件配置,再展示可用入口。
验证访客、受邀成员、停用用户及退出登录后的页面和接口行为。

完成标志:直接自行注册请求被拒绝,受邀用户仍可登录并按原有权限访问。

重要原理与实现

以下是实现本例时的接入位置与预期界面变化;它们是开发说明,具体文件名沿用当前应用结构。

接入位置代码或配置变化界面与行为变化
client/config/auth.ts、server/config/auth.ts保留并组合匹配的认证扩展,调整注册与找回配置登录方式与可用入口一致
应用登录、注册、找回页面沿用模板页面,按能力显示操作不再出现不可用的注册或找回入口
受保护路由与接口接入登录检查,再执行业务授权访客被正确引导,直接 API 调用也受保护

接入与配置

默认模板已在 Client 和 Server 注册认证插件,并在 client/config/auth.ts、server/config/auth.ts 组合认证配置。修改现有配置时保留应用需要的扩展,避免用一个示例覆盖整个 plugins 数组。

配置或文件用途
server/config/auth.ts使用 defineAuthConfig 组合登录方式与服务端扩展
client/config/auth.ts注册与服务端匹配的客户端扩展
auth.emailAndPassword.enabled是否启用邮箱密码登录
auth.emailAndPassword.disableSignUp是否关闭自行注册
secrets.keys / SECRETS_KEYS提供持久密钥,认证插件从中派生签名与加密密钥
auth.passwordReset配置密码找回及邮件渠道

认证所需表由插件迁移维护。登录、注册、密码找回等页面属于应用源码;插件不会额外注册一套相同页面。使用现有模板页面时,应先检查其路由和实际启用的登录方式。

在页面和接口中使用

客户端从 /client 使用 useAuthentication() 读取会话和加载状态,使用 useAuthenticationClient() 调用认证客户端。页面用 auth: 'required' 声明需要登录,访客页面按应用路由约定配置。

服务端从 /server 取得 authenticationToken,通过认证服务的 required() 中间件保护接口;业务权限在认证之后检查。只隐藏登录后的菜单不能保护 API。

AI 开发的约束与验证

本插件的开发约束

  • 客户端与服务端扩展成对修改,持久密钥和可信来源沿用部署配置。
  • 关闭注册要检查直接注册请求;密码找回要检查实际投递与链接,不只检查按钮。
  • 测试会话恢复、退出和被停用身份,业务接口在认证之后继续执行授权。

常见问题

  • 安装后没有登录页:页面由应用负责,检查应用自身路由和模板页面。
  • 重启后会话异常:检查各实例是否使用同一组持久认证密钥,以及会话存储配置。
  • 登录成功仍无权访问:检查业务授权,登录不自动赋予管理权限。
  • 需要脚本调用 API:参阅 API 密钥,不要把浏览器会话处理复制成另一套认证机制。

通用安装与迁移操作见管理插件。

上述检查是接入后的验收要求,不表示本文已完成运行验证。让 Agent 报告实际改动、执行过的检查和未验证项;项目指引、Skills 与通用检查流程见持续开发应用和测试。

源码依据:插件公开入口与实现。

NocoBase 文档助手

关于 NocoBase,你想了解什么?

每次提问独立回答,不会参考之前的问答。请提供完整背景。