匿名

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

安装

将插件添加到您的认证配置中

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

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

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

迁移数据库

运行迁移或生成模式(schema),以将必要的字段和表添加到数据库中。

npx @better-auth/cli migrate
npx @better-auth/cli generate

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

添加客户端插件

接下来,在您的认证客户端实例中包含 anonymous 客户端插件。

auth-client.ts
import { createAuthClient } from "better-auth/client"
import { anonymousClient } from "better-auth/client/plugins"

export const authClient = createAuthClient({
    plugins: [
        anonymousClient()
    ]
})

使用方法

登录 (Sign In)

要匿名登录用户,请使用 signIn.anonymous() 方法。

example.ts
const user = await authClient.signIn.anonymous()

账户关联

如果用户已匿名登录并尝试使用其他方法进行 signIn(登录)或 signUp(注册),其匿名活动可以关联到新账户。

要实现此功能,您首先需要向插件提供 onLinkAccount 回调函数。

auth.ts
import { betterAuth } from "better-auth"

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

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

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

选项

  • emailDomainName:用于为匿名用户生成电子邮件地址的域名。默认为当前站点的域名。
auth.ts
import { betterAuth } from "better-auth"

export const auth = betterAuth({
    plugins: [
        anonymous({
            emailDomainName: "example.com"
        })
    ]
})
  • onLinkAccount:当匿名用户将其账户关联到新的身份验证方法时调用的回调函数。该回调接收一个包含 anonymousUser(匿名用户)和 newUser(新用户)的对象。

  • disableDeleteAnonymousUser:默认情况下,当账户关联到新的身份验证方法时,匿名用户会被删除。将此选项设置为 true 可禁用此行为。

  • generateName:用于为匿名用户生成名称的回调函数。如果您希望为匿名用户设置随机名称,或者您的数据库中 name 字段要求唯一,此功能会很有用。

数据库结构

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

字段名称类型Key描述
isAnonymousboolean标识用户是否为匿名用户。

On this page