匿名插件

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

安装

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

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

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

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

添加客户端插件

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

auth-client.ts
import { createAuthClient } from "better-auth/client"
import { anonymousClient } from "better-auth/client/plugins"
 
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 }) => {
               // 执行操作,如将购物车项目从匿名用户移动到新用户
            }
        })
    ]

然后当你使用另一种方法调用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可禁用此行为。

Schema

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

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

On this page