魔法链接
魔法链接或邮件链接是一种无需密码即可验证用户身份的方式。当用户输入邮箱后,系统会向其邮箱发送一个链接。用户点击该链接后即可完成身份验证。
安装步骤
添加服务器插件
将魔法链接插件添加到您的服务器:
import { betterAuth } from "better-auth";
import { magicLink } from "better-auth/plugins";
export const auth = betterAuth({
plugins: [
magicLink({
sendMagicLink: async ({ email, token, url }, request) => {
// 向用户发送邮件
}
})
]
})
添加客户端插件
将魔法链接插件添加到您的客户端:
import { createAuthClient } from "better-auth/client";
import { magicLinkClient } from "better-auth/client/plugins";
export const authClient = createAuthClient({
plugins: [
magicLinkClient()
]
});
使用方法
使用 Magic Link 登录
要通过 magic link 登录,您需要调用 signIn.magicLink
并传入用户的电子邮件地址。系统将调用 sendMagicLink
函数将 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
函数。
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
。
generateToken:generateToken
函数用于生成一个用于唯一标识用户的令牌。默认值为随机字符串。该函数包含一个参数:
email
:用户的电子邮件地址。
使用 generateToken
时,请确保返回的字符串难以猜测,因为它用于以保密方式验证用户的真实身份。默认情况下,我们返回一个长且具有加密安全性的字符串。
storeToken:storeToken
函数用于将魔法链接令牌存储到数据库中。默认值为 "plain"
。
storeToken
函数可以是以下选项之一:
"plain"
:令牌以明文形式存储。"hashed"
:使用默认的哈希器对令牌进行哈希处理。{ type: "custom-hasher", hash: (token: string) => Promise<string> }
:使用自定义的哈希器对令牌进行哈希处理。