Поправил регистрацию и авторизацию, сделал unique логин пользователя в схеме
This commit is contained in:
parent
811856fee4
commit
f721d16ace
5 changed files with 105 additions and 34 deletions
|
|
@ -1,34 +1,41 @@
|
|||
import type { APIContext } from "astro";
|
||||
import { createSession, getUserFromAuth } from "../../db";
|
||||
import { Prisma } from "@prisma/client";
|
||||
|
||||
export async function post({ request, redirect, cookies }: APIContext) {
|
||||
export async function post({ request, cookies }: APIContext) {
|
||||
const response: { ok: boolean; reason?: string } = {
|
||||
ok: true,
|
||||
};
|
||||
try {
|
||||
const formData = await request.formData();
|
||||
const login = formData.get("login");
|
||||
const password = formData.get("password");
|
||||
if (login === null || password === null) {
|
||||
throw new Error("Не предоставлены данные для входа");
|
||||
}
|
||||
|
||||
const formData = await request.formData();
|
||||
const login = formData.get("login");
|
||||
const password = formData.get("password");
|
||||
if (login === null || password === null) {
|
||||
response.ok = false;
|
||||
response.reason = "Не предоставлены данные для входа";
|
||||
} else {
|
||||
const user = await getUserFromAuth(login!.toString(), password!.toString());
|
||||
|
||||
if (user === null) {
|
||||
response.ok = false;
|
||||
response.reason = "Неправильная связка логин/пароль";
|
||||
throw new Error("Неправильная связка логин/пароль");
|
||||
}
|
||||
|
||||
const session = await createSession(user!);
|
||||
if (session === null) {
|
||||
throw new Error("Не удалось создать сессию для пользователя");
|
||||
}
|
||||
|
||||
response.ok = true;
|
||||
cookies.set("session", session.id, {
|
||||
path: "/",
|
||||
});
|
||||
} catch (e: any) {
|
||||
response.ok = false;
|
||||
if (e instanceof Prisma.PrismaClientKnownRequestError) {
|
||||
response.reason = `Неизвестная ошибка базы данных. Код ${e.code}`;
|
||||
} else if (e instanceof Error) {
|
||||
response.reason = e.message.trim();
|
||||
} else {
|
||||
const session = await createSession(user!);
|
||||
if (session !== null) {
|
||||
response.ok = true;
|
||||
cookies.set("session", session.id, {
|
||||
path: "/",
|
||||
});
|
||||
} else {
|
||||
response.ok = false;
|
||||
response.reason = "Не удалось создать сессию для пользователя";
|
||||
}
|
||||
response.reason = e.toString().trim();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,25 +1,39 @@
|
|||
import type { APIContext } from "astro";
|
||||
import { createUser } from "../../db";
|
||||
import { Prisma } from "@prisma/client";
|
||||
|
||||
export async function post({ request }: APIContext) {
|
||||
const response: { ok: boolean; reason?: string } = {
|
||||
ok: true,
|
||||
};
|
||||
|
||||
const formData = await request.formData();
|
||||
const login = formData.get("login");
|
||||
const password = formData.get("password");
|
||||
if (login === null || password === null) {
|
||||
response.ok = false;
|
||||
response.reason = "Не предоставлены данные для регистрации";
|
||||
} else {
|
||||
try {
|
||||
const formData = await request.formData();
|
||||
const login = formData.get("login");
|
||||
const password = formData.get("password");
|
||||
if (login === null || password === null) {
|
||||
throw new Error("Не предоставлены данные для регистрации");
|
||||
}
|
||||
|
||||
const user = await createUser(login!.toString(), password!.toString());
|
||||
|
||||
if (user === null) {
|
||||
response.ok = false;
|
||||
response.reason = "Невозможно зарегистрировать пользователя";
|
||||
throw new Error("Невозможно зарегистрировать пользователя");
|
||||
}
|
||||
|
||||
response.ok = true;
|
||||
} catch (e: any) {
|
||||
response.ok = false;
|
||||
if (e instanceof Prisma.PrismaClientKnownRequestError) {
|
||||
if (e.code === "P2002") {
|
||||
response.reason = "Пользователь с таким логином уже существует";
|
||||
} else {
|
||||
response.reason = `Неизвестная ошибка базы данных. Код ${e.code}`;
|
||||
}
|
||||
} else if (e instanceof Error) {
|
||||
response.reason = e.message.trim();
|
||||
} else {
|
||||
response.ok = true;
|
||||
response.reason = e.toString().trim();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue