Nuxt 集成
在开始之前,请确保你已配置了 Better Auth 实例。如果还没有配置,请查看安装指南。
🌐 Before you start, make sure you have a Better Auth instance configured. If you haven't done that yet, check out the installation.
创建 API 路由
🌐 Create API Route
我们需要将处理程序挂载到 API 路由。在 /server/api/auth 目录下创建一个名为 [...all].ts 的文件,并添加以下代码:
🌐 We need to mount the handler to an API route. Create a file inside /server/api/auth called [...all].ts and add the following code:
import { auth } from "~/lib/auth"; // import your auth config
export default defineEventHandler((event) => {
return auth.handler(toWebRequest(event));
});You can change the path on your better-auth configuration but it's recommended to keep it as /api/auth/[...all]
迁移数据库
🌐 Migrate the database
运行以下命令以在数据库中创建所需的表:
🌐 Run the following command to create the necessary tables in your database:
npx @better-auth/cli migrate创建客户端
🌐 Create a client
创建一个客户端实例。你可以随意命名文件。在这里,我们在 lib/ 目录下创建 client.ts 文件。
🌐 Create a client instance. You can name the file anything you want. Here we are creating client.ts file inside the lib/ directory.
import { createAuthClient } from "better-auth/vue" // make sure to import from better-auth/vue
export const authClient = createAuthClient({
//you can pass client configuration here
})一旦创建了客户端,你就可以使用它来注册、登录以及执行其他操作。有些操作是响应式的。
🌐 Once you have created the client, you can use it to sign up, sign in, and perform other actions. Some of the actions are reactive.
示例用法
🌐 Example usage
<script setup lang="ts">
import { authClient } from "~/lib/client"
const session = authClient.useSession()
</script>
<template>
<div>
<button v-if="!session?.data" @click="() => authClient.signIn.social({
provider: 'github'
})">
Continue with GitHub
</button>
<div>
<pre>{{ session.data }}</pre>
<button v-if="session.data" @click="authClient.signOut()">
Sign out
</button>
</div>
</div>
</template>服务器使用
🌐 Server Usage
从 auth 实例导出的 api 对象包含了你可以在服务器上执行的所有操作。在 Better Auth 中创建的每个端点都可以作为函数调用,包括插件端点。
🌐 The api object exported from the auth instance contains all the actions that you can perform on the server. Every endpoint made inside Better Auth is a invocable as a function. Including plugins endpoints.
示例:在服务器 API 路由上获取会话
import { auth } from "~/lib/auth";
export default defineEventHandler((event) => {
const session = await auth.api.getSession({
headers: event.headers
});
if(session) {
// access the session.session && session.user
}
});SSR 使用
🌐 SSR Usage
如果你在使用带有 SSR 的 Nuxt,你可以在页面组件的 setup 函数中使用 useSession 函数,并传入 useFetch 以使其在 SSR 下工作。
🌐 If you are using Nuxt with SSR, you can use the useSession function in the setup function of your page component and pass useFetch to make it work with SSR.
<script setup lang="ts">
import { authClient } from "~/lib/auth-client";
const { data: session } = await authClient.useSession(useFetch);
</script>
<template>
<p>
{{ session }}
</p>
</template>中间件
🌐 Middleware
要在你的 Nuxt 项目中添加中间件,你可以使用客户端的 useSession 方法。
🌐 To add middleware to your Nuxt project, you can use the useSession method from the client.
import { authClient } from "~/lib/auth-client";
export default defineNuxtRouteMiddleware(async (to, from) => {
const { data: session } = await authClient.useSession(useFetch);
if (!session.value) {
if (to.path === "/dashboard") {
return navigateTo("/");
}
}
});资源与示例
🌐 Resources & Examples
- GitHub 上的 Nuxt 和 Nuxt Hub 示例。
- NuxtZzle 是 Nuxt 和 Drizzle ORM 示例 在 GitHub 上 预览
- Nuxt 示例 在 StackBlitz 上。
- NuxSaaS (Github) 是一个全栈 SaaS 启动工具包,利用 Better Auth 提供安全高效的用户认证。演示
- NuxtOne (Github) 是一个基于 Nuxt 的起始模板,用于构建 AIaaS(人工智能即服务)应用。