| | <!DOCTYPE html>
|
| | <html lang="en">
|
| | <head>
|
| | <meta charset="UTF-8">
|
| | <title>Login</title>
|
| | <script src="https://cdn.tailwindcss.com"></script>
|
| | </head>
|
| | <body class="min-h-screen bg-gradient-to-br from-indigo-600 to-purple-700 flex items-center justify-center">
|
| |
|
| | <div class="bg-white w-full max-w-md rounded-2xl shadow-xl p-8">
|
| | <h2 class="text-3xl font-bold text-center text-gray-800">Welcome Back</h2>
|
| | <p class="text-center text-gray-500 mt-2">Login to continue</p>
|
| |
|
| | <form method="POST" class="mt-6 space-y-4">
|
| | <input type="email" name="email" placeholder="Email"
|
| | required
|
| | class="w-full px-4 py-3 rounded-lg border focus:ring-2 focus:ring-indigo-500 outline-none">
|
| |
|
| | <input type="password" name="password" placeholder="Password"
|
| | required
|
| | class="w-full px-4 py-3 rounded-lg border focus:ring-2 focus:ring-indigo-500 outline-none">
|
| |
|
| | <button
|
| | class="w-full bg-indigo-600 hover:bg-indigo-700 text-white py-3 rounded-lg font-semibold transition">
|
| | Login
|
| | </button>
|
| | </form>
|
| |
|
| | <div class="flex justify-between text-sm mt-4 text-gray-600">
|
| | <a href="/auth/register" class="hover:underline">Create account</a>
|
| | <a href="/auth/forgot" class="hover:underline">Forgot password?</a>
|
| | </div>
|
| | </div>
|
| | <script>
|
| | const form = document.querySelector("form");
|
| |
|
| | form.addEventListener("submit", async (e) => {
|
| | e.preventDefault();
|
| |
|
| | const formData = new FormData(form);
|
| |
|
| | const res = await fetch("/auth/login", {
|
| | method: "POST",
|
| | body: formData
|
| | });
|
| |
|
| | const data = await res.json();
|
| |
|
| | if (data.access_token) {
|
| |
|
| | localStorage.setItem("jwt_token", data.access_token);
|
| |
|
| |
|
| | window.location.href = "/";
|
| | } else {
|
| | alert("Login failed");
|
| | }
|
| | });
|
| | </script>
|
| | <div id="alertBox"
|
| | class="hidden fixed top-5 right-5 max-w-sm px-5 py-4 rounded-lg shadow-lg text-white">
|
| | </div>
|
| | {% if success %}
|
| | <script>
|
| | showAlert("{{ success }}", "success");
|
| | </script>
|
| | {% endif %}
|
| |
|
| | </body>
|
| | </html>
|
| |
|