Appearance
03 · 认证与鉴权
用 Better Auth 实现认证
不要手写 JWT 逻辑,用 Better Auth 这类库:
用 Better Auth 为我的 Hono 应用配置认证:
需要支持:
- 邮箱 + 密码登录/注册
- GitHub OAuth 登录
- Google OAuth 登录
数据库用 Drizzle + PostgreSQL(/src/db/schema.ts 里已有 users 表)。
帮我:
1. 安装并配置 Better Auth
2. 生成需要的数据库表(session、account 等)
3. 在 Hono 里集成 auth 路由(/api/auth/*)
4. 写一个 authMiddleware 验证登录态实现角色权限
我的平台有三种角色:student、instructor、admin。
用 Better Auth 的 RBAC 插件配置权限:
- student:只能看自己购买的课程
- instructor:能管理自己创建的课程
- admin:能管理所有内容
写一个 requireRole(role) 中间件,用于路由保护。JWT 手动实现(轻量场景)
如果不用框架,手写 JWT:
用 jose 库(轻量 JWT,支持 Edge Runtime)写认证工具:
1. createToken(userId, role):生成 7 天有效期的 JWT
2. verifyToken(token):验证并返回 payload,失败时抛出 AuthError
3. refreshToken(token):在有效期最后 1 天内自动续期
密钥从 JWT_SECRET 环境变量读取。
放在 /src/lib/auth/jwt.ts。OAuth 接入
帮我配置 GitHub OAuth 登录,在 Hono 里实现:
1. GET /auth/github → 重定向到 GitHub 授权页
2. GET /auth/github/callback → 处理回调,获取用户信息,创建或更新用户,返回 JWT
需要从 GitHub API 获取的用户信息:id、name、email、avatar_url。
Client ID 和 Secret 从环境变量读。安全检查
审查 /src/routes/auth.ts 的安全性,重点检查:
1. 密码是否在传输或存储中明文出现
2. JWT secret 是否可能泄露
3. 是否存在用户枚举漏洞(注册/登录报错不应区分「邮箱不存在」和「密码错误」)
4. 是否缺少频率限制(暴力破解防护)
5. OAuth state 参数是否正确验证(防 CSRF)