Adds /login route with HTML template that handles GET (show form) and POST (authenticate). On successful login, sets session cookie and redirects to /. Also adds framework support for redirects and cookies in route handlers. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
56 lines
1.1 KiB
Plaintext
56 lines
1.1 KiB
Plaintext
<html>
|
|
<head>
|
|
<title>Login</title>
|
|
<style>
|
|
body {
|
|
font-family: system-ui, sans-serif;
|
|
max-width: 400px;
|
|
margin: 50px auto;
|
|
padding: 20px;
|
|
}
|
|
form {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 15px;
|
|
}
|
|
label {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 5px;
|
|
}
|
|
input {
|
|
padding: 8px;
|
|
font-size: 16px;
|
|
}
|
|
button {
|
|
padding: 10px;
|
|
font-size: 16px;
|
|
cursor: pointer;
|
|
}
|
|
.error {
|
|
color: red;
|
|
padding: 10px;
|
|
background: #fee;
|
|
border: 1px solid #fcc;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h1>Login</h1>
|
|
{% if error %}
|
|
<div class="error">{{ error }}</div>
|
|
{% endif %}
|
|
<form method="POST" action="/login">
|
|
<label>
|
|
Email
|
|
<input type="email" name="email" required value="{{ email | default('') }}">
|
|
</label>
|
|
<label>
|
|
Password
|
|
<input type="password" name="password" required>
|
|
</label>
|
|
<button type="submit">Login</button>
|
|
</form>
|
|
</body>
|
|
</html>
|