一次性令牌插件
一次性令牌 (OTT) 插件
一次性令牌 (OTT) 插件提供了生成和验证安全的、一次性使用的会话令牌的功能。这通常用于跨域身份验证。
安装
将插件添加到您的认证配置中
要使用一次性令牌插件,请将其添加到您的认证配置中。
import { betterAuth } from "better-auth";
import { oneTimeToken } from "better-auth/plugins/one-time-token";
export const auth = betterAuth({
plugins: [
oneTimeToken()
]
// ... 其他认证配置
});
添加客户端插件
接下来,在您的认证客户端实例中包含一次性令牌客户端插件。
import { createAuthClient } from "better-auth/client"
import { oneTimeTokenClient } from "better-auth/client/plugins"
export const authClient = createAuthClient({
plugins: [
oneTimeTokenClient()
]
})
使用方法
1. 生成令牌
使用 auth.api.generateOneTimeToken
或 authClient.oneTimeToken.generate
生成令牌
GET
/one-time-token/generateconst { data, error } = await authClient.oneTimeToken.generate();
这将返回一个附加到当前会话的 token
,可用于验证一次性令牌。默认情况下,令牌将在 3 分钟后过期。
2. 验证令牌
当用户点击链接或提交令牌时,在另一个 API 路由中使用 auth.api.verifyOneTimeToken
或 authClient.oneTimeToken.verify
方法来验证它。
POST
/one-time-token/verifyconst { 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);
}
}
})