魔法链接

魔法链接或邮件链接是一种无需密码即可验证用户身份的方式。当用户输入邮箱后,系统会向其邮箱发送一个链接。用户点击该链接后即可完成身份验证。

安装步骤

添加服务器插件

将魔法链接插件添加到您的服务器:

server.ts
import { betterAuth } from "better-auth";
import { magicLink } from "better-auth/plugins";

export const auth = betterAuth({
    plugins: [
        magicLink({
            sendMagicLink: async ({ email, token, url }, request) => {
                // 向用户发送邮件
            }
        })
    ]
})

添加客户端插件

将魔法链接插件添加到您的客户端:

auth-client.ts
import { createAuthClient } from "better-auth/client";
import { magicLinkClient } from "better-auth/client/plugins";
export const authClient = createAuthClient({
    plugins: [
        magicLinkClient()
    ]
});

使用方法

要通过 magic link 登录,您需要调用 signIn.magicLink 并传入用户的电子邮件地址。系统将调用 sendMagicLink 函数将 magic link 发送到用户的邮箱。

POST
/sign-in/magic-link
const { data, error } = await authClient.signIn.magicLink({    email: "user@email.com", // required    name: "my-name",    callbackURL: "/dashboard",    newUserCallbackURL: "/welcome",    errorCallbackURL: "/error",});
属性描述类型
email
用于发送 magic link 的电子邮件地址。
string
name?
用户显示名称。仅在用户首次注册时使用。
string
callbackURL?
验证 magic link 后重定向的 URL。
string
newUserCallbackURL?
新用户注册后重定向的 URL。
string
errorCallbackURL?
验证过程中发生错误时重定向的 URL。 如果仅提供了 callbackURL 而未提供 errorCallbackURL,则用户将被重定向至带有 error 查询参数的 callbackURL。
string

如果用户尚未注册,除非将 disableSignUp 设置为 true,否则系统将自动为其注册账号。

验证魔法链接

当您将 sendMagicLink 函数生成的 URL 发送给用户后,用户点击该链接将完成身份验证并被重定向到 signIn.magicLink 函数中指定的 callbackURL。如果发生错误,用户将被重定向到带有错误查询参数的 callbackURL

如果未提供 callbackURL,用户将被重定向到根 URL。

如果您希望手动处理验证(例如,如果您向用户发送了不同的 URL),可以使用 verify 函数。

GET
/magic-link/verify
const { data, error } = await authClient.magicLink.verify({    token: "123456", // required    callbackURL: "/dashboard",});
属性描述类型
token
验证令牌。
string
callbackURL?
魔法链接验证后重定向的 URL,如果未提供将返回会话。
string

配置选项

sendMagicLink:当用户请求魔法链接时调用 sendMagicLink 函数。它接收一个包含以下属性的对象:

  • email:用户的电子邮件地址。
  • url:要发送给用户的 URL。此 URL 包含令牌。
  • token:如果您希望通过自定义 URL 发送令牌,则包含此令牌。

以及一个 request 对象作为第二个参数。

expiresIn:指定魔法链接过期的时间(以秒为单位)。默认值为 300 秒(5 分钟)。

disableSignUp:如果设置为 true,用户将无法使用魔法链接注册。默认值为 false

generateTokengenerateToken 函数用于生成一个用于唯一标识用户的令牌。默认值为随机字符串。该函数包含一个参数:

  • email:用户的电子邮件地址。

使用 generateToken 时,请确保返回的字符串难以猜测,因为它用于以保密方式验证用户的真实身份。默认情况下,我们返回一个长且具有加密安全性的字符串。

storeTokenstoreToken 函数用于将魔法链接令牌存储到数据库中。默认值为 "plain"

storeToken 函数可以是以下选项之一:

  • "plain":令牌以明文形式存储。
  • "hashed":使用默认的哈希器对令牌进行哈希处理。
  • { type: "custom-hasher", hash: (token: string) => Promise<string> }:使用自定义的哈希器对令牌进行哈希处理。

On this page