添加了swagger接口、重置密码、修改了usercontroller
Change-Id: Ib651fa9b0fe0b220eb8cb88dde2b63d6bf54895e
diff --git a/src/main/resources/static/home.html b/src/main/resources/static/home.html
index 5cac114..507e3ad 100644
--- a/src/main/resources/static/home.html
+++ b/src/main/resources/static/home.html
@@ -9,22 +9,20 @@
<div id="userInfo"></div>
<script>
(async () => {
- const token = localStorage.getItem('token'); // 从 localStorage 获取 token
- if (!token) return window.location.href = 'login.html'; // 如果 token 不存在,重定向到登录页面
-
- const res = await fetch('/api/me', {
- headers: { 'token': token } // 使用 token 请求用户信息
- });
-
- const json = await res.json(); // 解析响应数据
- if (json.code !== 0) {
- return window.location.href = 'login.html'; // 如果获取用户信息失败,重定向到登录页面
+ const token = localStorage.getItem('token');
+ if (!token) {
+ return window.location.href = 'login.html';
}
-
- // 输出当前用户和 token
- document.getElementById('userInfo')
- .innerText = '当前用户:' + json.data.username + ',Token:' + json.data; // 显示用户名和 token
+ const res = await fetch('/api/me', {
+ headers: { 'token': token }
+ });
+ const json = await res.json();
+ if (json.code !== 0) {
+ return window.location.href = 'login.html';
+ }
+ document.getElementById('userInfo').innerText =
+ `当前用户:${json.data.username},Token:${json.data.token}`;
})();
</script>
</body>
-</html>
\ No newline at end of file
+</html>
diff --git a/src/main/resources/static/login.html b/src/main/resources/static/login.html
index 993941d..f7d02c7 100644
--- a/src/main/resources/static/login.html
+++ b/src/main/resources/static/login.html
@@ -8,31 +8,38 @@
<body>
<h2>用户登录</h2>
<form id="loginForm">
- <label>身份证号:</label>
- <input type="number" name="identificationNumber" required>
- <label>密码:</label>
- <input type="password" name="password" required>
+ <div>
+ <label>邮箱:</label>
+ <input type="email" name="email" required>
+ </div>
+ <div>
+ <label>密码:</label>
+ <input type="password" name="password" required>
+ </div>
<button type="submit">登录</button>
</form>
++ <p><a href="reset.html">忘记密码?</a></p>
+
<script>
- document.getElementById('loginForm')
- .addEventListener('submit', async e => {
- e.preventDefault();
- const form = new URLSearchParams(new FormData(e.target));
- const res = await fetch('/login', {
- method: 'POST',
- body: form
- });
- const json = await res.json();
- if (res.ok && json.code === 0) {
- // 保存 token
- localStorage.setItem('token', json.data);
- // 跳转到受保护的页面
- window.location.href = 'home.html';
- } else {
- alert(json.msg);
- }
+ document.getElementById('loginForm').addEventListener('submit', async e => {
+ e.preventDefault();
+ const data = {
+ email: e.target.email.value,
+ password: e.target.password.value
+ };
+ const res = await fetch('/login', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(data)
});
+ const json = await res.json();
+ if (res.ok && json.code === 0) {
+ localStorage.setItem('token', json.data);
+ window.location.href = 'home.html';
+ } else {
+ alert(json.msg || json.error);
+ }
+ });
</script>
</body>
</html>
diff --git a/src/main/resources/static/register.html b/src/main/resources/static/register.html
index 549c790..72fc1b8 100644
--- a/src/main/resources/static/register.html
+++ b/src/main/resources/static/register.html
@@ -1,4 +1,3 @@
-<!-- src/main/resources/static/register.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
@@ -8,44 +7,65 @@
<body>
<h2>用户注册</h2>
<form id="regForm">
- <label>用户名:</label>
- <input type="text" name="username" required>
- <label>邮箱:</label>
- <input type="email" name="email" required>
- <button type="button" id="sendCode">发送验证码</button>
- <label>邮箱验证码:</label>
- <input type="text" name="verificationCode" required>
- <label>密码:</label>
- <input type="password" name="password" required>
- <label>身份证号(8 位数字):</label>
- <input type="number" name="identificationNumber" required>
+ <div>
+ <label>用户名:</label>
+ <input type="text" name="username" required>
+ </div>
+ <div>
+ <label>邮箱:</label>
+ <input type="email" name="email" required>
+ <button type="button" id="sendCode">发送验证码</button>
+ </div>
+ <div>
+ <label>邮箱验证码:</label>
+ <input type="text" name="verificationCode" required>
+ </div>
+ <div>
+ <label>密码:</label>
+ <input type="password" name="password" required>
+ </div>
+ <div>
+ <label>身份证号(8 位):</label>
+ <input type="text" name="identificationNumber" required pattern="\d{8}" maxlength="8">
+ </div>
<button type="submit">注册</button>
</form>
+
<script>
- document.getElementById('sendCode')
- .addEventListener('click', async () => {
- const form = new URLSearchParams();
- form.set('email', document.querySelector('[name=email]').value);
- const res = await fetch('/sendVerification', {
- method: 'POST',
- body: form
- });
- alert((await res.json()).msg);
+ // 发送注册验证码
+ document.getElementById('sendCode').addEventListener('click', async () => {
+ const email = document.querySelector('[name=email]').value;
+ if (!email) { alert('请先输入邮箱'); return; }
+ const res = await fetch('/sendVerification', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ email })
});
- document.getElementById('regForm')
- .addEventListener('submit', async e => {
- e.preventDefault();
- const form = new URLSearchParams(new FormData(e.target));
- const res = await fetch('/register', {
- method: 'POST',
- body: form
- });
- const json = await res.json();
- alert(json.msg);
- if (res.ok && json.code===0) {
- window.location.href='login.html';
- }
+ const json = await res.json();
+ alert(json.msg || json.error);
+ });
+
+ // 提交注册
+ document.getElementById('regForm').addEventListener('submit', async e => {
+ e.preventDefault();
+ const data = {
+ username: e.target.username.value,
+ email: e.target.email.value,
+ verificationCode: e.target.verificationCode.value,
+ password: e.target.password.value,
+ identificationNumber: e.target.identificationNumber.value
+ };
+ const res = await fetch('/register', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(data)
});
+ const json = await res.json();
+ alert(json.msg || json.error);
+ if (res.ok && json.code === 0) {
+ window.location.href = 'login.html';
+ }
+ });
</script>
</body>
</html>
diff --git a/src/main/resources/static/reset.html b/src/main/resources/static/reset.html
new file mode 100644
index 0000000..7a87ccf
--- /dev/null
+++ b/src/main/resources/static/reset.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+ <meta charset="UTF-8">
+ <title>重置密码</title>
+</head>
+<body>
+<h2>重置密码</h2>
+<form id="resetForm">
+ <div>
+ <label>邮箱:</label>
+ <input type="email" name="email" required>
+ <button type="button" id="sendResetCode">获取重置验证码</button>
+ </div>
+ <div>
+ <label>验证码:</label>
+ <input type="text" name="code" required>
+ </div>
+ <div>
+ <label>新密码:</label>
+ <input type="password" name="newPassword" required>
+ </div>
+ <button type="submit">重置密码</button>
+</form>
+
+<script>
+ // 发送重置验证码
+ document.getElementById('sendResetCode').addEventListener('click', async () => {
+ const email = document.querySelector('[name=email]').value;
+ if (!email) { alert('请先输入邮箱'); return; }
+ const res = await fetch('/sendResetCode', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ email })
+ });
+ const json = await res.json();
+ alert(json.msg || json.error);
+ });
+
+ // 提交重置请求
+ document.getElementById('resetForm').addEventListener('submit', async e => {
+ e.preventDefault();
+ const data = {
+ email: e.target.email.value,
+ code: e.target.code.value,
+ newPassword: e.target.newPassword.value
+ };
+ const res = await fetch('/resetPassword', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(data)
+ });
+ const json = await res.json();
+ alert(json.msg || json.error);
+ if (res.ok && json.code === 0) {
+ window.location.href = 'login.html';
+ }
+ });
+</script>
+</body>
+</html>