server side cookies

This commit is contained in:
2025-03-02 15:27:38 +01:00
parent 2e9304ac27
commit 4fa0fadc45
4 changed files with 33 additions and 26 deletions
+12 -4
View File
@@ -30,14 +30,22 @@ export async function POST(req: NextRequest) {
await database.users.insertOne({ email, password, name, platforms: {} }); await database.users.insertOne({ email, password, name, platforms: {} });
const sessionId = (await database.sessions.insertOne({ user: email })) const sessionId = await database.sessions.insertOne({ user: email });
.insertedId;
return NextResponse.json( const response = NextResponse.json(
{ {
message: 'ok', message: 'ok',
sessionId,
}, },
{ status: 200 } { status: 200 }
); );
response.cookies.set('session_id', sessionId.toString(), {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'strict',
path: '/',
maxAge: 60 * 60 * 24, // 1 day
});
return response;
} }
+21 -18
View File
@@ -53,7 +53,7 @@ export async function GET(req: NextRequest) {
export async function POST(req: NextRequest) { export async function POST(req: NextRequest) {
const { email, password } = await req.json(); const { email, password } = await req.json();
if (typeof email !== 'string' || typeof password !== 'string') if (typeof email !== 'string' || typeof password !== 'string') {
return NextResponse.json( return NextResponse.json(
{ {
message: message:
@@ -61,36 +61,39 @@ export async function POST(req: NextRequest) {
}, },
{ status: 400 } { status: 400 }
); );
}
const user = await database.users.findOne({ email }); const user = await database.users.findOne({ email });
if (!user) if (!user || user.password !== password) {
return NextResponse.json( return NextResponse.json(
{ {
message: 'Email does not exist', message: 'Invalid email or password',
}, },
{ status: 401 } { status: 401 }
); );
}
if (user.password !== password) const sessionId = new ObjectId();
return NextResponse.json( await database.sessions.insertOne({
{ _id: sessionId,
message: 'Invalid password', user: user._id.toString(),
}, });
{ status: 401 }
);
const _id = new ObjectId(); const response = NextResponse.json(
database.sessions
.insertOne({ _id, user: user._id.toString() })
.then((res) => {});
return NextResponse.json(
{ {
message: 'ok', message: 'ok',
sessionId: _id.toString(),
}, },
{ status: 200 } { status: 200 }
); );
response.cookies.set('session_id', sessionId.toString(), {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'strict',
path: '/',
maxAge: 60 * 60 * 24, // 1 day
});
return response;
} }
-3
View File
@@ -7,7 +7,6 @@ import { useToast } from '@/hooks/use-toast';
import axios from 'axios'; import axios from 'axios';
import Link from 'next/link'; import Link from 'next/link';
import { useState } from 'react'; import { useState } from 'react';
import cookies from 'js-cookie';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
export default function Login() { export default function Login() {
@@ -25,8 +24,6 @@ export default function Login() {
}) })
).data; ).data;
cookies.set('session_id', sessionId);
router.replace('/dashboard'); router.replace('/dashboard');
} catch (err: any) { } catch (err: any) {
toast({ toast({
-1
View File
@@ -52,7 +52,6 @@ export default function SignUp() {
password, password,
}) })
.then(async (response) => { .then(async (response) => {
document.cookie = `session_id=${response.data.sessionId}`;
router.push('/dashboard'); router.push('/dashboard');
}) })
.catch((err) => { .catch((err) => {