Files
encoach_frontend/src/pages/api/login.ts

39 lines
1.3 KiB
TypeScript

import { NextApiRequest, NextApiResponse } from "next";
import { getAuth, signInWithEmailAndPassword } from "firebase/auth";
import { app } from "@/firebase";
import { sessionOptions } from "@/lib/session";
import { withIronSessionApiRoute } from "iron-session/next";
import { User } from "@/interfaces/user";
import { getFirestore, getDoc, doc } from "firebase/firestore";
const auth = getAuth(app);
const db = getFirestore(app);
export default withIronSessionApiRoute(login, sessionOptions);
async function login(req: NextApiRequest, res: NextApiResponse) {
const { email, password } = req.body as { email: string; password: string };
signInWithEmailAndPassword(auth, email.toLowerCase(), password)
.then(async (userCredentials) => {
const userId = userCredentials.user.uid;
const docUser = await getDoc(doc(db, "users", userId));
if (!docUser.exists()) {
res.status(401).json({ error: 401, message: "User does not exist!" });
return;
}
const user = docUser.data() as User;
req.session.user = { ...user, id: userId };
await req.session.save();
res.status(200).json({ user: { ...user, id: userId } });
})
.catch((error) => {
console.log(error);
res.status(401).json({ error });
});
}