魔法链接或电子邮件链接是一种无需密码即可验证用户身份的方式。当用户输入他们的电子邮件地址时,系统会向其邮箱发送一个链接。当用户点击该链接后,即可完成身份验证。
安装
添加服务器插件将魔法链接插件添加到您的服务器:
server.tsimport { betterAuth } from "better-auth";
import { magicLink } from "better-auth/plugins";
export const auth = betterAuth({
plugins: [
magicLink({
sendMagicLink: async ({ email, token, url }, request) => {
// 向用户发送电子邮件
}
})
]
})添加客户端插件将魔法链接插件添加到您的客户端:
auth-client.tsimport { createAuthClient } from "better-auth/client";
import { magicLinkClient } from "better-auth/client/plugins";
const authClient = createAuthClient({
plugins: [
magicLinkClient()
]
});
使用方法
使用魔法链接登录
要使用魔法链接登录,您需要调用signIn.magicLink并提供用户的电子邮件地址。系统会调用sendMagicLink函数将魔法链接发送到用户的电子邮件。
magic-link.tsconst { data, error } = await authClient.signIn.magicLink({
email: "[email protected]",
callbackURL: "/dashboard", //成功登录后重定向的地址(可选)
});
如果用户尚未注册,除非将disableSignUp设置为true,否则系统将自动为用户注册。
验证魔法链接
当您将由sendMagicLink函数生成的URL发送给用户时,用户点击链接后将完成身份验证,并被重定向到signIn.magicLink函数中指定的callbackURL。如果发生错误,用户将被重定向到带有错误查询参数的callbackURL。
如果未提供callbackURL,用户将被重定向到根URL。
如果您想手动处理验证过程(例如,如果您向用户发送了不同的URL),可以使用verify函数。
magic-link.tsconst { data, error } = await authClient.magicLink.verify({
query: {
token,
},
});
配置选项
sendMagicLink:当用户请求魔法链接时调用的函数。它接收一个具有以下属性的对象:
email:用户的电子邮件地址。
url:要发送给用户的URL。此URL包含令牌。
token:如果您想使用自定义URL发送令牌,可以使用此令牌。
以及作为第二个参数的request对象。
expiresIn:指定魔法链接过期的时间(以秒为单位)。默认值为300秒(5分钟)。
disableSignUp:如果设置为true,用户将无法使用魔法链接注册。默认值为false。
generateToken:用于生成用于唯一标识用户的令牌的函数。默认值是一个随机字符串。有一个参数:
email:用户的电子邮件地址。
使用generateToken时,请确保返回的字符串难以猜测,因为它用于以保密方式验证某人的身份。默认情况下,我们返回一个长且加密安全的字符串。
手机号码如何使用better-auth的手机号码插件
电子邮件一次性密码Better Auth的电子邮件一次性密码插件。