匿名

用于 Better Auth 的匿名插件。

Anonymous 插件允许用户在无需提供电子邮件地址、密码、OAuth 提供商或任何其他个人身份信息(PII)的情况下获得身份验证体验。用户稍后可以在准备好时将认证方式链接到其账户。

安装

将插件添加到您的身份验证配置中

要启用匿名身份验证,请将 anonymous 插件添加到您的身份验证配置中。

auth.ts
import { betterAuth } from "better-auth"
import { anonymous } from "better-auth/plugins"

export const auth = betterAuth({
    // ... 其他配置选项
    plugins: [
        anonymous() 
    ]
})

迁移数据库

运行迁移或生成模式以向数据库添加必要的字段和表。

npx auth migrate
npx auth generate

请参阅模式部分以手动添加字段。

添加客户端插件

接下来,在您的身份验证客户端实例中包含匿名客户端插件。

auth-client.ts
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()

关联账户

如果用户已匿名登录,并尝试使用其他方法 signInsignUp,他们的匿名活动可以关联到新的账户。

为此,您需要先向插件提供 onLinkAccount 回调。

auth.ts
import { betterAuth } from "better-auth"
import { anonymous } from "better-auth/plugins"

export const auth = betterAuth({
    plugins: [
        anonymous({
            onLinkAccount: async ({ anonymousUser, newUser }) => {
               // 执行操作,如将购物车商品从匿名用户转移到新用户
            }
        })
    ]

然后,当您使用另一种方法调用 signInsignUp 时,onLinkAccount 回调将被调用。默认情况下,anonymousUser 会被删除。

import { authClient } from "@/lib/auth-client";

const user = await authClient.signIn.email({
    email,
})

删除匿名用户

要删除匿名用户,您可以调用 /delete-anonymous-user 端点。

POST/delete-anonymous-user
await authClient.deleteAnonymousUser();

注意:

  • 当账户链接到新的认证方法时,匿名用户默认会被删除。
  • 设置 disableDeleteAnonymousUsertrue 会阻止匿名用户调用 /delete-anonymous-user 端点。

选项

emailDomainName

用于为匿名用户生成电子邮件地址的域名。如果未提供,则使用默认格式 temp@{id}.com

auth.ts
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

用于为匿名用户生成电子邮件地址的自定义函数。允许您定义自己的邮箱格式。该函数可以是同步或异步的。

auth.ts
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

当匿名用户将账户关联到新的认证方法时调用的回调函数。回调接收一个包含 anonymousUsernewUser 的对象。

disableDeleteAnonymousUser

默认情况下,当匿名用户关联账户到新的认证方法时,会自动删除匿名用户记录。 如果您设置此选项为 true,此自动删除将被禁用, 并且匿名用户将无法访问 /delete-anonymous-user 端点。

generateName

调用此回调函数以为匿名用户生成名称。如果您想为匿名用户生成随机名称,或数据库中 name 字段为唯一时,此选项非常有用。

模式

Anonymous 插件需要在用户表中添加一个额外字段:

Table
字段
类型
描述
isAnonymous
boolean
?
指示用户是否为匿名用户。