One-Time Token 플러그인
One-Time Token (OTT) 플러그인은 안전한 일회용 세션 토큰을 생성하고 검증하는 기능을 제공합니다. 이는 일반적으로 도메인 간 인증에 사용됩니다.
설치
auth 구성에 플러그인 추가
One-Time Token 플러그인을 사용하려면 auth 구성에 추가합니다.
import { betterAuth } from "better-auth";
import { oneTimeToken } from "better-auth/plugins/one-time-token";
export const auth = betterAuth({
plugins: [
oneTimeToken()
]
// ... 기타 auth 구성
});클라이언트 플러그인 추가
다음으로, 인증 클라이언트 인스턴스에 one-time-token 클라이언트 플러그인을 포함합니다.
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});| Prop | Description | Type |
|---|---|---|
token | 검증할 토큰입니다. | string |
이렇게 하면 토큰에 연결된 세션이 반환됩니다.
옵션
oneTimeToken 플러그인을 추가할 때 다음 옵션을 구성할 수 있습니다:
disableClientRequest(boolean): 선택 사항.true인 경우 토큰은 서버 측에서만 생성됩니다. 기본값:false.expiresIn(number): 선택 사항. 토큰이 유효한 기간(분)입니다. 기본값:3.
oneTimeToken({
expiresIn: 10 // 10분
})-
generateToken:session객체와ctx를 매개변수로 받는 사용자 정의 토큰 생성기 함수입니다. -
storeToken: 선택 사항. 이 옵션을 사용하면 토큰이 데이터베이스에 저장되는 방식을 구성할 수 있습니다.plain: 토큰이 일반 텍스트로 저장됩니다. (기본값)hashed: 토큰이 기본 hasher를 사용하여 해시됩니다.custom-hasher: 토큰을 받아 해시된 토큰을 반환하는 사용자 정의 hasher 함수입니다.
참고: 전송되는 토큰에는 영향을 미치지 않으며, 데이터베이스에 저장된 토큰에만 영향을 미칩니다.
예제:
oneTimeToken({
storeToken: "plain"
})oneTimeToken({
storeToken: "hashed"
})oneTimeToken({
storeToken: {
type: "custom-hasher",
hash: async (token) => {
return myCustomHasher(token);
}
}
})