Anonymous

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

安装

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

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

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

export const auth = betterAuth({
    // ... other config options
    plugins: [
        anonymous() 
    ]
})

迁移数据库

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

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

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

添加客户端插件

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

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

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

使用

登录

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

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

链接账户

如果用户已经匿名登录并尝试使用其他方法进行 signInsignUp,则他们的匿名活动可以链接到新账户。

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

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

export const auth = betterAuth({
    plugins: [
        anonymous({
            onLinkAccount: async ({ anonymousUser, newUser }) => {
               // perform actions like moving the cart items from anonymous user to the new user
            }
        })
    ]

然后,当您使用其他方法调用 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:当匿名用户将他们的账户链接到新认证方法时调用的回调函数。该回调接收一个包含 anonymousUsernewUser 的对象。

  • disableDeleteAnonymousUser:默认情况下,当账户链接到新认证方法时,匿名用户将被删除。将此选项设置为 true 以禁用此行为。

  • generateName:用于为匿名用户生成名称的回调函数。如果您希望匿名用户具有随机名称,或者您的数据库中的 name 是唯一的,则此函数很有用。

Schema

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

Field NameTypeKeyDescription
isAnonymousboolean指示用户是否为匿名用户。

On this page