一次性令牌插件

一次性令牌 (OTT) 插件

一次性令牌 (OTT) 插件提供了生成和验证安全的、一次性使用的会话令牌的功能。这通常用于跨域身份验证。

安装

将插件添加到您的认证配置中

要使用一次性令牌插件,请将其添加到您的认证配置中。

auth.ts
import { betterAuth } from "better-auth";
import { oneTimeToken } from "better-auth/plugins/one-time-token";

export const auth = betterAuth({
    plugins: [
      oneTimeToken()
    ]
    // ... 其他认证配置
});

添加客户端插件

接下来,在您的认证客户端实例中包含一次性令牌客户端插件。

auth-client.ts
import { createAuthClient } from "better-auth/client"
import { oneTimeTokenClient } from "better-auth/client/plugins"

export const authClient = createAuthClient({
    plugins: [
        oneTimeTokenClient()
    ]
})

使用方法

1. 生成令牌

使用 auth.api.generateOneTimeTokenauthClient.oneTimeToken.generate 生成令牌

GET
/one-time-token/generate
const { data, error } = await authClient.oneTimeToken.generate();

这将返回一个附加到当前会话的 token,可用于验证一次性令牌。默认情况下,令牌将在 3 分钟后过期。

2. 验证令牌

当用户点击链接或提交令牌时,在另一个 API 路由中使用 auth.api.verifyOneTimeTokenauthClient.oneTimeToken.verify 方法来验证它。

POST
/one-time-token/verify
const { data, error } = await authClient.oneTimeToken.verify({    token: "some-token", // required});
属性描述类型
token
要验证的令牌。
string

这将返回附加到该令牌的会话。

配置选项

在添加 oneTimeToken 插件时可配置以下选项:

  • disableClientRequest (布尔值): 可选。如果设为 true,令牌将仅在服务器端生成。默认值:false
  • expiresIn (数值): 可选。令牌的有效时长(单位:分钟)。默认值:3
oneTimeToken({
    expiresIn: 10 // 10 分钟
})
  • generateToken: 自定义令牌生成函数,接收 session 对象和 ctx 作为参数。

  • storeToken: 可选。此选项允许您配置令牌在数据库中的存储方式。

    • plain: 令牌以明文形式存储。(默认)
    • hashed: 使用默认哈希器对令牌进行哈希处理。
    • custom-hasher: 自定义哈希函数,接收令牌并返回哈希后的令牌。

注意:这不会影响发送的令牌,只会影响存储在数据库中的令牌。

示例:

无哈希处理(默认)
oneTimeToken({
    storeToken: "plain"
})
内置哈希器
oneTimeToken({
    storeToken: "hashed"
})
自定义哈希器
oneTimeToken({
    storeToken: {
        type: "custom-hasher",
        hash: async (token) => {
            return myCustomHasher(token);
        }
    }
})

On this page