SvelteKit + Lucia: 이메일 및 비밀번호 인증
이 가이드는 최소한 로그인 부분에서 이메일 및 비밀번호 인증을 구현하는 방법을 다룹니다. the documentation 에서 더 잘 설명된 일부 부분에 대해 얼버무리겠습니다.
설정
기본 설정에 대해 설명합니다here.
데이터 베이스
데이터베이스별 설명은 adapters을 참조하십시오. 값이 고유한
email
(text/varchar)라는 새 열을 추가합니다.프런트엔드
JSON 본문을 사용하여 가입 또는 로그인 끝점에 POST 요청을 보냅니다.
const signup = async () => {
await fetch("/api/signup", {
method: "POST",
body: JSON.stringify({
email,
password,
}),
});
};
가입하기
routes/api/signup.ts
를 만들고 POST 요청을 수락합니다. 본문 데이터에서 이메일과 비밀번호를 가져옵니다.import type { RequestHandler } from "@sveltejs/kit";
import { auth } from "$lib/lucia";
export const POST: RequestHandler = async ({ request }) => {
const { email, password } = await request.json();
if (!email || !password) {
return {
status: 400,
};
}
};
새 사용자 만들기
createUser
의 인증 ID와 email
의 식별자를 사용하여 email
을 사용하여 새 사용자를 만듭니다. 인증 ID는 사용된 인증 방법(Github OAuth의 경우 "github")을 나타내고 식별자는 해당 방법 내의 사용자(GitHub의 경우 사용자 이름 또는 이메일)를 나타냅니다. 사용자를 식별하는 데 사용되며 사용자 데이터를 저장하지 않습니다(사용자의 이메일을 저장해야 하는 경우 db에 이메일 열을 생성).인증 ID 및 식별자에 대한 설명은 overview 페이지를 참조하십시오.
암호 옵션을 사용하여 사용자의 암호를 저장하고
user_data
를 사용하여 사용자의 이메일을 저장합니다. 쿠키(새로 고침, 액세스 및 지문 토큰)를 설정하고 응답에서 사용자를 리디렉션합니다. AUTH_DUPLICATE_IDENTIFER_TOKEN
오류는 사용자가 동일한 인증 ID 및 식별자(이 경우 이메일)를 사용하여 새 계정을 만들려고 할 때 발생합니다.try {
const createUser = await auth.createUser("email", email, {
password,
user_data: {
email,
},
});
return {
status: 302,
headers: {
"set-cookie": createUser.cookies,
location: "/",
},
};
} catch (e) {
const error = e as Error;
if (
error.message === "AUTH_DUPLICATE_IDENTIFER_TOKEN" ||
error.message === "AUTH_DUPLICATE_USER_DATA"
) {
return {
status: 400,
body: JSON.stringify({
error: "Email already in use.",
}),
};
}
return {
status: 500,
body: JSON.stringify({
error: "Unknown error.",
}),
};
}
로그인
routes/api/login.ts
를 만들고 POST 요청을 수락합니다. 본문에서 사용자의 이메일과 비밀번호를 가져옵니다.import type { RequestHandler } from "@sveltejs/kit";
import { auth } from "$lib/lucia";
export const POST: RequestHandler = async ({ request }) => {
const form = await request.formData();
const email = form.get("email")?.toString();
const password = form.get("password")?.toString();
if (!email || !password) {
return {
status: 400,
};
}
};
사용자 인증
authenticateUser
을 사용하여 사용자를 인증합니다. 이 경우 세 번째 매개변수에 비밀번호가 필요합니다. 인증 ID는 사용자를 생성할 때 사용한 것과 동일해야 합니다. 이메일이 잘못되었거나 비밀번호가 잘못되었는지 사용자에게 알리지 않는 것이 중요합니다.try {
const authenticateUser = await auth.authenticateUser(
"email",
email,
password
);
return {
status: 302,
headers: {
"set-cookie": createUser.cookies,
location: "/",
},
};
} catch (e) {
const error = e as Error;
if (
error.message === "AUTH_INVALID_IDENTIFIER_TOKEN" ||
error.message === "AUTH_INVALID_PASSWORD"
) {
return {
status: 400,
body: JSON.stringify({
error: "Incorrect email or password.",
}),
};
}
// database connection error
return {
status: 500,
body: JSON.stringify({
error: "Unknown error.",
}),
};
}
그게 다야. Lucia 및 인증의 다른 부분(예: 토큰 새로 고침 및 보호 경로)은 getting started 에 설명되어 있습니다.
Reference
이 문제에 관하여(SvelteKit + Lucia: 이메일 및 비밀번호 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pilcrowonpaper/sveltekit-lucia-authentication-guide-email-and-password-6f2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)