匿名
用于 Better Auth 的匿名插件。
Anonymous 插件允许用户在无需提供电子邮件地址、密码、OAuth 提供商或任何其他个人身份信息(PII)的情况下获得身份验证体验。用户稍后可以在准备好时将认证方式链接到其账户。
安装
将插件添加到您的身份验证配置中
要启用匿名身份验证,请将 anonymous 插件添加到您的身份验证配置中。
import { betterAuth } from "better-auth"
import { anonymous } from "better-auth/plugins"
export const auth = betterAuth({
// ... 其他配置选项
plugins: [
anonymous()
]
})添加客户端插件
接下来,在您的身份验证客户端实例中包含匿名客户端插件。
import { createAuthClient } from "better-auth/client"
import { anonymousClient } from "better-auth/client/plugins"
export const authClient = createAuthClient({
plugins: [
anonymousClient()
]
})用法
登录
要匿名登录用户,使用 signIn.anonymous() 方法。
import { authClient } from "@/lib/auth-client";
const user = await authClient.signIn.anonymous()关联账户
如果用户已匿名登录,并尝试使用其他方法 signIn 或 signUp,他们的匿名活动可以关联到新的账户。
为此,您需要先向插件提供 onLinkAccount 回调。
import { betterAuth } from "better-auth"
import { anonymous } from "better-auth/plugins"
export const auth = betterAuth({
plugins: [
anonymous({
onLinkAccount: async ({ anonymousUser, newUser }) => {
// 执行操作,如将购物车商品从匿名用户转移到新用户
}
})
]然后,当您使用另一种方法调用 signIn 或 signUp 时,onLinkAccount 回调将被调用。默认情况下,anonymousUser 会被删除。
import { authClient } from "@/lib/auth-client";
const user = await authClient.signIn.email({
email,
})删除匿名用户
要删除匿名用户,您可以调用 /delete-anonymous-user 端点。
await authClient.deleteAnonymousUser();注意:
- 当账户链接到新的认证方法时,匿名用户默认会被删除。
- 设置
disableDeleteAnonymousUser为true会阻止匿名用户调用/delete-anonymous-user端点。
选项
emailDomainName
用于为匿名用户生成电子邮件地址的域名。如果未提供,则使用默认格式 temp@{id}.com。
import { betterAuth } from "better-auth"
import { anonymous } from "better-auth/plugins"
export const auth = betterAuth({
plugins: [
anonymous({
emailDomainName: "example.com" // -> temp-{id}@example.com
})
]
})generateRandomEmail
用于为匿名用户生成电子邮件地址的自定义函数。允许您定义自己的邮箱格式。该函数可以是同步或异步的。
import { betterAuth } from "better-auth"
import { anonymous } from "better-auth/plugins"
export const auth = betterAuth({
plugins: [
anonymous({
generateRandomEmail: () => {
const id = crypto.randomUUID()
return `guest-${id}@example.com`
}
})
]
})注意:
- 提供了
generateRandomEmail后,emailDomainName会被忽略。 - 您需要负责确保邮箱唯一以避免冲突。返回的邮箱必须符合有效格式。
onLinkAccount
当匿名用户将账户关联到新的认证方法时调用的回调函数。回调接收一个包含 anonymousUser 和 newUser 的对象。
disableDeleteAnonymousUser
默认情况下,当匿名用户关联账户到新的认证方法时,会自动删除匿名用户记录。
如果您设置此选项为 true,此自动删除将被禁用,
并且匿名用户将无法访问 /delete-anonymous-user 端点。
generateName
调用此回调函数以为匿名用户生成名称。如果您想为匿名用户生成随机名称,或数据库中 name 字段为唯一时,此选项非常有用。
模式
Anonymous 插件需要在用户表中添加一个额外字段: