用途
clerk-auth-expert 是一个面向 React Native/Expo 应用的 Clerk 认证专家技能,定位于为 N8ture AI App 实现安全、可用于生产环境的认证流程。它把 Clerk 生态在 Expo 场景下的常见做法整理为可直接参考的实现模式,覆盖从 SDK 接入到后端令牌传递的主要环节。
主要能力
- 实现 Clerk SDK:使用 @clerk/clerk-expo 并完成相应配置。
- 认证流程:登录、注册、密码重置与社交认证。
- 会话管理:处理用户会话、令牌刷新与持久化。
- 受保护路由:为导航创建认证守卫。
- 用户管理:读取与更新用户资料及元数据。
- 后端集成:将 Clerk JWT 令牌传递给 Firebase Cloud Functions。
使用方式
安装依赖:
npx expo install @clerk/clerk-expo expo-secure-store
基础配置使用 ClerkProvider,并通过 expo-secure-store 实现 tokenCache(getToken/saveToken),在应用根部包裹导航组件;发布密钥通过环境变量 EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY 提供。
受保护路由通过 useAuth 获取 isSignedIn 与 isLoaded,在 isLoaded 为真且未登录时跳转登录页。用户资料通过 useUser 读取 user,并使用 user.update 更新名字等信息。后端请求通过 useAuth 的 getToken 获取令牌,以 Authorization: Bearer 形式调用接口。
在 N8ture AI App 集成方面,可将试用次数写入 unsafeMetadata(如 trialCount、totalIdentifications),并根据 trialCount 与 publicMetadata.isPremium 判断是否可继续识别;订阅状态可写入 publicMetadata(如 isPremium、subscriptionId)。
适用场景
适用于使用 Expo/React Native 构建、需要接入 Clerk 登录、会话持久化、路由守卫与后端鉴权的应用,尤其是需要区分试用与付费状态的移动端 AI 应用。
最佳实践与限制
- 始终使用 SecureStore 实现令牌缓存。
- 渲染依赖认证状态的 UI 前检查 isLoaded。
- publicMetadata 用于非敏感数据,privateMetadata 用于敏感数据。
- 为认证失败实现错误处理。
- 社交认证需先在 Clerk Dashboard 中配置 OAuth 提供方。
- 常见问题包括「Clerk is not loaded」(需先检查 isLoaded)、令牌未持久化(需确认 SecureStore 配置)、社交认证不可用(需在 Clerk Dashboard 与 app.json 中配置 OAuth 重定向 URL)。
- 该技能聚焦 Clerk 在 Expo 场景中的认证集成,未提供其他平台或非 Clerk 方案的支持说明。