用途:该技能面向使用 Vue 3 的开发者,提供在 Vue 应用中集成 Clerk 认证的代码模式,涵盖组合式函数(composables)、Vue Router 导航守卫以及 Pinia 认证状态存储三类常见需求。资料说明其 SDK 为 @clerk/vue v2+(Vue 3);若使用 Nuxt,应改用 clerk-nuxt-patterns。
主要能力:
- 组合式函数:useAuth(响应式 isSignedIn、userId、signOut)、useUser(响应式 user 对象)、useClerk(完整 Clerk 实例,用于高级操作)、useOrganization(响应式 organization 与 membership),另有 useOrganizationList 用于组织列表与切换。
- 参考文档分类:组合式函数见 references/composables.md,Vue Router 导航守卫见 references/vue-router-guards.md,带认证状态的 Pinia store 见 references/pinia-integration.md。
- 组件:可从 @clerk/vue 引入组件,如 SignInButton(示例中用于未登录状态)。
使用方式:
- 插件安装:在 main.ts 中通过 app.use(clerkPlugin, { publishableKey: import.meta.env.VITE_CLERK_PUBLISHABLE_KEY }) 注册,并挂载应用。
- 组合式函数调用示例:在 <script setup lang="ts"> 中从 @clerk/vue 引入 useAuth、useUser,取用 const { isSignedIn, userId, signOut } = useAuth() 与 const { user } = useUser();模板中根据 isSignedIn 渲染问候信息与登出按钮,未登录时使用 SignInButton。
- 组织切换示例:从 @clerk/vue 引入 useOrganizationList,取用 userMemberships 与 setActive,遍历 userMemberships.data 渲染按钮,点击时调用 setActive({ organization: mem.organization.id })。
- 导入来源统一为 @clerk/vue,涵盖组合式函数、插件设置与组件。
适用场景:Vue 3 单页应用中需要登录/登出、读取当前用户、切换组织等认证相关功能的场景;需要结合 Vue Router 做路由级访问控制,或结合 Pinia 集中管理认证状态的场景。
限制与注意事项:
- 资料明确该技能不适用于 Nuxt,应使用 clerk-nuxt-patterns。
- 常见陷阱一:组合式函数返回 undefined,原因是未处于 ClerkProvider 组件树内,修复方式是确保调用 app.use(clerkPlugin, { publishableKey })。
- 常见陷阱二:userId 为响应式但未更新,原因是解构丢失响应性,修复方式为使用 const { userId } = useAuth()(toRefs 风格组合式函数,具响应性)。
- 相关资料另见 clerk-setup(初始安装)、clerk-custom-ui(自定义流程与外观)、clerk-orgs(B2B 组织),以及 Vue SDK 文档。
具体功能边界、收费与价格、平台支持范围、性能或效果说明,以及除上述以外的完整使用步骤,资料中未提供。