From 79a4c1199a9f064c112a4c75d0639a2d0d58daa4 Mon Sep 17 00:00:00 2001 From: headlesdev Date: Sat, 17 May 2025 17:12:43 +0200 Subject: [PATCH] Login Site --- app/LoginPage.tsx | 52 ++++++++++++++++++++++++++++++++++------------- package-lock.json | 17 ++++++++++++++++ package.json | 2 ++ 3 files changed, 57 insertions(+), 14 deletions(-) diff --git a/app/LoginPage.tsx b/app/LoginPage.tsx index 042e417..dc0ed00 100644 --- a/app/LoginPage.tsx +++ b/app/LoginPage.tsx @@ -1,49 +1,71 @@ "use client"; import Image from "next/image" -import Link from "next/link" +import { useState } from "react"; +import { useRouter } from "next/navigation"; +import axios from "axios"; +import Cookies from "js-cookie"; +import ErrorToast from "@/components/Error"; export default function LoginPage() { + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [remember, setRemember] = useState(false); + + const [error, setError] = useState(""); + const router = useRouter(); + + const login = async () => { + try { + const response = await axios.post("/api/user/login", { email, password, remember }); + + if (response.status === 200) { + const token = response.data.token; + if (token) { + Cookies.set("token", token); + router.push("/dashboard"); + } else { + setError("No login token received"); + } + } + } catch (error: any) { + setError(error.response.data.error); + } + }; return (
-
+

Welcome back

Please login with your account

-
+
- + setEmail(e.target.value)} />
- - + setPassword(e.target.value)} />
- - + +
@@ -68,6 +90,8 @@ export default function LoginPage() { priority />
+ + setError("")} />
) } diff --git a/package-lock.json b/package-lock.json index 5459a8a..62a0cf5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,12 @@ "version": "2.0.0", "dependencies": { "@prisma/client": "^6.8.2", + "@types/js-cookie": "^3.0.6", "@types/jsonwebtoken": "^9.0.9", "axios": "^1.9.0", "bcryptjs": "^3.0.2", "daisyui": "^5.0.35", + "js-cookie": "^3.0.5", "jsonwebtoken": "^9.0.2", "lucide-react": "^0.511.0", "next": "15.3.2", @@ -1016,6 +1018,12 @@ "tailwindcss": "4.1.7" } }, + "node_modules/@types/js-cookie": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz", + "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==", + "license": "MIT" + }, "node_modules/@types/jsonwebtoken": { "version": "9.0.9", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz", @@ -1483,6 +1491,15 @@ "jiti": "lib/jiti-cli.mjs" } }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", diff --git a/package.json b/package.json index 7c90cf8..bc99067 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,12 @@ }, "dependencies": { "@prisma/client": "^6.8.2", + "@types/js-cookie": "^3.0.6", "@types/jsonwebtoken": "^9.0.9", "axios": "^1.9.0", "bcryptjs": "^3.0.2", "daisyui": "^5.0.35", + "js-cookie": "^3.0.5", "jsonwebtoken": "^9.0.2", "lucide-react": "^0.511.0", "next": "15.3.2",