Browse Source
- Added AuthController for user registration, login, and fetching user details. - Introduced JobController for managing scheduled jobs, including listing, starting, stopping, and updating job frequency. - Created StatusController to provide a simple health check endpoint. - Implemented session middleware for managing user sessions. - Developed login and registration pages with form handling and validation.route
17 changed files with 3329 additions and 113 deletions
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
@ -0,0 +1,14 @@ |
|||
import session from 'koa-session'; |
|||
|
|||
export default (app) => { |
|||
const CONFIG = { |
|||
key: 'koa:sess', // cookie key
|
|||
maxAge: 86400000, // 1天
|
|||
httpOnly: true, |
|||
signed: true, |
|||
rolling: false, |
|||
renew: false, |
|||
}; |
|||
app.keys = app.keys || ['koa3-demo-session-secret']; |
|||
return session(CONFIG, app); |
|||
}; |
@ -0,0 +1,31 @@ |
|||
extends /layouts/page.pug |
|||
|
|||
block content |
|||
.login-container |
|||
h2 登录 |
|||
form#loginForm(action="/login" method="post") |
|||
.form-group |
|||
label(for="username") 用户名 |
|||
input#username(type="text" name="username" required placeholder="请输入用户名") |
|||
.form-group |
|||
label(for="password") 密码 |
|||
input#password(type="password" name="password" required placeholder="请输入密码") |
|||
button(type="submit") 登录 |
|||
script. |
|||
document.getElementById('loginForm').onsubmit = async function(e) { |
|||
e.preventDefault(); |
|||
const form = e.target; |
|||
const data = Object.fromEntries(new FormData(form)); |
|||
const res = await fetch(form.action, { |
|||
method: 'POST', |
|||
headers: { 'Content-Type': 'application/json' }, |
|||
body: JSON.stringify(data) |
|||
}); |
|||
const result = await res.json(); |
|||
if(result.success) { |
|||
alert('登录成功'); |
|||
window.location.href = '/'; |
|||
} else { |
|||
alert(result.message || '登录失败'); |
|||
} |
|||
} |
@ -0,0 +1,94 @@ |
|||
doctype html |
|||
html |
|||
head |
|||
meta(charset="UTF-8") |
|||
meta(name="viewport", content="width=device-width, initial-scale=1.0") |
|||
title 注册 |
|||
style. |
|||
body { |
|||
background: #f5f7fa; |
|||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; |
|||
} |
|||
.register-container { |
|||
max-width: 400px; |
|||
margin: 60px auto; |
|||
background: #fff; |
|||
border-radius: 10px; |
|||
box-shadow: 0 2px 16px rgba(0,0,0,0.08); |
|||
padding: 32px 28px 24px 28px; |
|||
} |
|||
.register-title { |
|||
text-align: center; |
|||
font-size: 2rem; |
|||
margin-bottom: 24px; |
|||
color: #333; |
|||
font-weight: 600; |
|||
} |
|||
.form-group { |
|||
margin-bottom: 18px; |
|||
} |
|||
label { |
|||
display: block; |
|||
margin-bottom: 6px; |
|||
color: #555; |
|||
font-size: 1rem; |
|||
} |
|||
input[type="text"], |
|||
input[type="email"], |
|||
input[type="password"] { |
|||
width: 100%; |
|||
padding: 10px 12px; |
|||
border: 1px solid #d1d5db; |
|||
border-radius: 6px; |
|||
font-size: 1rem; |
|||
background: #f9fafb; |
|||
transition: border 0.2s; |
|||
} |
|||
input:focus { |
|||
border-color: #409eff; |
|||
outline: none; |
|||
} |
|||
.register-btn { |
|||
width: 100%; |
|||
padding: 12px 0; |
|||
background: linear-gradient(90deg, #409eff 0%, #66b1ff 100%); |
|||
color: #fff; |
|||
border: none; |
|||
border-radius: 6px; |
|||
font-size: 1.1rem; |
|||
font-weight: 600; |
|||
cursor: pointer; |
|||
margin-top: 10px; |
|||
transition: background 0.2s; |
|||
} |
|||
.register-btn:hover { |
|||
background: linear-gradient(90deg, #66b1ff 0%, #409eff 100%); |
|||
} |
|||
.login-link { |
|||
display: block; |
|||
text-align: right; |
|||
margin-top: 14px; |
|||
color: #409eff; |
|||
text-decoration: none; |
|||
font-size: 0.95rem; |
|||
} |
|||
.login-link:hover { |
|||
text-decoration: underline; |
|||
body |
|||
.register-container |
|||
.register-title 注册账号 |
|||
form(action="/register" method="post") |
|||
.form-group |
|||
label(for="username") 用户名 |
|||
input(type="text" id="username" name="username" required placeholder="请输入用户名") |
|||
.form-group |
|||
label(for="email") 邮箱 |
|||
input(type="email" id="email" name="email" required placeholder="请输入邮箱") |
|||
.form-group |
|||
label(for="password") 密码 |
|||
input(type="password" id="password" name="password" required placeholder="请输入密码") |
|||
.form-group |
|||
label(for="confirm_password") 确认密码 |
|||
input(type="password" id="confirm_password" name="confirm_password" required placeholder="请再次输入密码") |
|||
button.register-btn(type="submit") 注册 |
|||
a.login-link(href="/login") 已有账号?去登录 |
Loading…
Reference in new issue