Menu

授权模块集成

Nexty 的授权功能基于 Better-auth,授权模块已经集成了大量开箱即用的功能:

  • 登录方式: Google、GitHub、邮箱魔法链接(Magic Link)、Google One Tap
  • 安全增强: Cloudflare Turnstile 验证码
  • 邮件服务: 新用户注册发送欢迎邮件
  • 用户角色: 提供 user/admin 角色、内置 AuthGuard 路由保护
  • 记录用户来源: 根据用户访问链接的参数,记录用户来源
  • 屏蔽用户: 管理员可轻松屏蔽风险用户,保护系统安全
  • 记录用户登录方式: 在本地记录用户上一次登录方式,让用户更快完成登录

Better-auth 环境变量

使用 Better-auth 必须配置 BETTER_AUTH_SECRET,可以使用命令生成:

openssl rand -base64 32

配置 Github OAuth

提示

如果不需要 Github 授权,在 components/auth/LoginForm.tsx 删除登录按钮即可。

打开 GitHub 的 OAuth Apps页面,点击 New OAuth App ,开始创建新的 OAuth app

在开发环境

  • Homepage URL 填写开发环境地址,如:http://localhost:3000
  • Authorization callback URL 填写指定 API 端点,如:http://localhost:3000/api/auth/callback/github

在生产环境

  • Homepage URL 填写生产环境地址,如:https://demo.nexty.dev
  • Authorization callback URL 填写指定 API 端点,如:https://demo.nexty.dev/api/auth/callback/github

提示

建议为开发环境和生产环境分别创建一个 OAuth app,这样无需修改 Homepage URLAuthorization callback URL

auth github create

创建完成后,你就能看到 Client ID ,再点击 Generate a new client secret 生成 Client Secret ,将它们填到环境变量 NEXT_PUBLIC_GITHUB_CLIENT_IDGITHUB_CLIENT_SECRET

auth github key

配置 Google OAuth

提示

如果不需要 Google 授权,在 components/auth/LoginForm.tsx 删除登录按钮即可。

打开 Google Cloud Console,点击 New Project

auth google create

输入项目名称,然后点击 Create

auth google create

开始设置 Project

auth google create
auth google create
auth google create
auth google create

创建 Client ID

auth google create
auth google create
  • Application type 选择 Web application
auth google create

在开发环境

  • Authorized JavaScript origins 填写开发环境地址,如:http://localhost:3000http://localhost
  • Authorized redirect URIs 填写指定 API 端点,如:http://localhost:3000/api/auth/callback/google

在生产环境

  • Authorized JavaScript origins 填写生产环境地址,如:https://demo.nexty.dev
  • Authorized redirect URIs 填写指定 API 端点,如:https://demo.nexty.dev/api/auth/callback/google
auth google create

把生成的 Client IDClient secret 复制到环境变量 NEXT_PUBLIC_GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRET

完成本地的环境变量配置后,可以在同一个项目下,创一个生产环境的 Client

auth google create

完成以上环境变量配置后,不仅可以使用 Google 授权,还会支持 Google One Tap 登录。

邮箱 Magic Link 登录需要给用户发送一封认证邮件,所以需要使用 Resend 服务。

当你完成 Resend 集成的步骤,邮箱 Magic Link 登录就会自动支持。

配置人机检测 Turnstile

登录 Cloudflare,打开左侧目录 Turnstile,点击 Add Widget

add widget

选择生产环境域名,并手动输入 localhost 用于本地测试

add hostnames

选择 Widget Mode 和 pre-clearance

select mode

Widget Mode 决定了通过什么方式来判断访客是不是机器人,3个选项含义分别是:

  • Managed(推荐):智能分析访客行为,可信用户直接通过,可疑用户需要点击验证
  • Non-interactive:显示加载动画,后台自动完成验证,用户无需操作
  • Invisible:完全隐藏验证过程,后台静默完成所有检查

Would you like to opt for pre-clearance for this site? 是决定已验证用户在后续访问中是否可以跳过部分验证流程。

  • 选择 No:每次访问都需要完整验证
  • 选择 Yes:根据所选模式提供不同程度的验证豁免
turnstile key

创建完成后,你会看到 Site KeySecret Key,分别复制到环境变量 NEXT_PUBLIC_TURNSTILE_SITE_KEYTURNSTILE_SECRET_KEY

配置完成后,用户使用邮箱登录时将触发 Turnstile 验证,有效防范机器人攻击,提升网站安全性。

turnstile demo