Magic link
Magic link 또는 email link는 비밀번호 없이 사용자를 인증하는 방법입니다. 사용자가 이메일을 입력하면 해당 이메일로 링크가 전송됩니다. 사용자가 링크를 클릭하면 인증됩니다.
설치
서버 플러그인 추가
서버에 magic link 플러그인을 추가합니다:
import { betterAuth } from "better-auth";
import { magicLink } from "better-auth/plugins";
export const auth = betterAuth({
plugins: [
magicLink({
sendMagicLink: async ({ email, token, url }, request) => {
// 사용자에게 이메일 전송
}
})
]
})클라이언트 플러그인 추가
클라이언트에 magic link 플러그인을 추가합니다:
import { createAuthClient } from "better-auth/client";
import { magicLinkClient } from "better-auth/client/plugins";
export const authClient = createAuthClient({
plugins: [
magicLinkClient()
]
});사용법
Magic Link로 로그인
magic link로 로그인하려면 사용자의 이메일 주소로 signIn.magicLink를 호출해야 합니다. 사용자의 이메일로 magic link를 전송하기 위해 sendMagicLink 함수가 호출됩니다.
const { data, error } = await authClient.signIn.magicLink({ email: "user@email.com", // required name: "my-name", callbackURL: "/dashboard", newUserCallbackURL: "/welcome", errorCallbackURL: "/error",});| Prop | Description | Type |
|---|---|---|
email | magic link를 전송할 이메일 주소 | string |
name? | 사용자 표시 이름. 사용자가 처음 등록하는 경우에만 사용됩니다 | string |
callbackURL? | magic link 확인 후 리디렉션할 URL | string |
newUserCallbackURL? | 신규 사용자 가입 후 리디렉션할 URL | string |
errorCallbackURL? | 확인 중 오류가 발생하면 리디렉션할 URL callbackURL만 제공되고 errorCallbackURL이 없으면 error 쿼리 매개변수와 함께 callbackURL로 리디렉션됩니다 | string |
사용자가 가입하지 않은 경우 disableSignUp이 true로 설정되지 않는 한 사용자는 자동으로 가입됩니다.
Magic Link 확인
sendMagicLink 함수에서 생성된 URL을 사용자에게 전송하면 링크를 클릭하여 인증하고 signIn.magicLink 함수에서 지정한 callbackURL로 리디렉션됩니다. 오류가 발생하면 사용자는 오류 쿼리 매개변수와 함께 callbackURL로 리디렉션됩니다.
callbackURL이 제공되지 않으면 사용자는 루트 URL로 리디렉션됩니다.
확인을 수동으로 처리하려는 경우(예: 사용자에게 다른 URL을 전송하는 경우) verify 함수를 사용할 수 있습니다.
const { data, error } = await authClient.magicLink.verify({ token: "123456", // required callbackURL: "/dashboard",});| Prop | Description | Type |
|---|---|---|
token | 확인 토큰 | string |
callbackURL? | magic link 확인 후 리디렉션할 URL, 제공되지 않으면 세션을 반환합니다 | string |
구성 옵션
sendMagicLink: sendMagicLink 함수는 사용자가 magic link를 요청할 때 호출됩니다. 다음 속성을 가진 객체를 받습니다:
email: 사용자의 이메일 주소url: 사용자에게 전송될 URL. 이 URL에는 토큰이 포함됩니다token: 사용자 정의 URL로 토큰을 전송하려는 경우의 토큰
그리고 두 번째 매개변수로 request 객체를 받습니다.
expiresIn: magic link가 만료되는 시간(초)을 지정합니다. 기본값은 300초(5분)입니다.
disableSignUp: true로 설정하면 사용자가 magic link를 사용하여 가입할 수 없습니다. 기본값은 false입니다.
generateToken: generateToken 함수는 사용자를 고유하게 식별하는 데 사용되는 토큰을 생성하기 위해 호출됩니다. 기본값은 무작위 문자열입니다. 매개변수는 다음과 같습니다:
email: 사용자의 이메일 주소
generateToken을 사용할 때는 반환되는 문자열이 추측하기 어렵도록 해야 합니다.
이는 기밀 방식으로 실제로 누군가가 누구인지 확인하는 데 사용되기 때문입니다.
기본적으로 길고 암호학적으로 안전한 문자열을 반환합니다.
storeToken: storeToken 함수는 magic link 토큰을 데이터베이스에 저장하기 위해 호출됩니다. 기본값은 "plain"입니다.
storeToken 함수는 다음 중 하나일 수 있습니다:
"plain": 토큰이 일반 텍스트로 저장됩니다"hashed": 토큰이 기본 해셔를 사용하여 해시됩니다{ type: "custom-hasher", hash: (token: string) => Promise<string> }: 토큰이 사용자 정의 해셔를 사용하여 해시됩니다