魔法链接
魔法链接或电子邮件链接是一种无需密码即可验证用户身份的方式。当用户输入其电子邮件地址时,会向其电子邮件发送一个链接。当用户点击该链接时,即可完成身份验证。
安装
添加服务器插件
将魔法链接插件添加到您的服务器:
import { betterAuth } from "better-auth";
import { magicLink } from "better-auth/plugins";
export const auth = betterAuth({
plugins: [
magicLink({
sendMagicLink: async ({ email, token, url }, request) => {
// send email to user
}
})
]
})添加客户端插件
将魔法链接插件添加到您的客户端:
import { createAuthClient } from "better-auth/client";
import { magicLinkClient } from "better-auth/client/plugins";
export const authClient = createAuthClient({
plugins: [
magicLinkClient()
]
});使用方法
使用魔法链接登录
要使用魔法链接登录,您需要调用 signIn.magicLink,并提供用户的电子邮件地址。sendMagicLink 函数将被调用,以向用户的电子邮件发送魔法链接。
const { data, error } = await authClient.signIn.magicLink({ email: "user@email.com", // required name: "my-name", callbackURL: "/dashboard", newUserCallbackURL: "/welcome", errorCallbackURL: "/error",});| Prop | Description | Type |
|---|---|---|
email | 发送魔法链接的电子邮件地址。 | string |
name? | 用户显示名称。仅在用户首次注册时使用。 | string |
callbackURL? | 魔法链接验证后的重定向 URL。 | string |
newUserCallbackURL? | 新用户注册后的重定向 URL | string |
errorCallbackURL? | 验证时发生错误的重定向 URL 如果仅提供了 callbackURL 但未提供 errorCallbackURL,则用户将被重定向到 callbackURL,并带有 error 查询参数。 | 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",});| Prop | Description | Type |
|---|---|---|
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> }:使用自定义哈希器对令牌进行哈希。