魔法链接

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

安装

添加服务器插件

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

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";
const authClient =  createAuthClient({
    plugins: [
        magicLinkClient()
    ]
});

使用方法

使用魔法链接登录

要使用魔法链接登录,您需要调用signIn.magicLink并提供用户的电子邮件地址。系统会调用sendMagicLink函数将魔法链接发送到用户的电子邮件。

magic-link.ts
const { 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.ts
const { 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时,请确保返回的字符串难以猜测,因为它用于以保密方式验证某人的身份。默认情况下,我们返回一个长且加密安全的字符串。

On this page