penisularhr-ui / src / routes / login / +page.server.ts
+page.server.ts
Raw
import { fail, redirect } from '@sveltejs/kit';
import { PUBLIC_BASE_API_URL } from '$env/static/public';

export async function load({ cookies }) {
	return {
		accessToken: cookies.get('accessToken')
	};
}

export const actions = {
	default: async ({ cookies, request, getClientAddress }) => {
		const data = await request.formData();
		const username = data.get('username');
		const password = data.get('password');

		const response = await fetch(`${PUBLIC_BASE_API_URL}/auth/login`, {
			body: JSON.stringify({ username, password }),
			headers: {
				'Content-Type': 'application/json',
				'x-forwarded-for': getClientAddress(),
				'x-real-ip': getClientAddress()
			},
			method: 'POST'
		});

		const responseData = await response.json();

		if (responseData.statusCode) {
			return fail(400, { message: responseData.message });
		}

		cookies.set('accessToken', responseData.token.accessToken, { path: '/' });
		cookies.set('role', responseData.user.role, { path: '/' });

		throw redirect(300, '/app');
	}
};