From 9ea8771324480c8ddea794508457a98fb25c0a86 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 1 Mar 2025 09:10:09 +0000 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=A8=E6=96=87=E6=A1=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 113 insertions(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 9320d07..7ae528f 100644 --- a/Readme.md +++ b/Readme.md @@ -16,7 +16,7 @@ | 字段名 | 数据类型 | 约束条件 | 解释 | | --------------- | -------- | --------------------- | ---- | -| id | INTEGER | NOT NULL,PRIMARY KEY | | +| id | INTEGER | NOT NULL,PRIMARY KEY | 主键 | | url | TEXT | NOT NULL | | | visitor_uuid | TEXT | NOT NULL | | | last_user_agent | TEXT | NOT NULL | | @@ -30,6 +30,118 @@ 5. 将 url 的 last_view_time进行排序,统计出最新的 n 个记录。 6. 将所有记录的不同 visitor_uuid 相加作为网站总访客数,将所有page_view_count相加作为网站总访问次数。 +## 注册/登录 + +```json +//接口: /api/v1/user/register + +//POST Body +{ + "username": "string(6-20位字母数字组合)", + "password": "string(8-20位,需包含大小写和数字)", + "email": "string(有效邮箱格式)" +} + +// 回复 +{ + "code": 200, + "message": "注册成功", + "data": { + "user_id": 256 + } +} + +curl -X POST \ + http://192.168.3.5:8081/api/v1/user/register \ + -H "Content-Type: application/json" \ + -d '{ + "username": "amass", + "password": "123456", + "email": "12345678@qq.com" + }' +``` + + + +```json +//接口: /api/v1/user/login + +// POST Body +{ + "username": "string", + "password": "string", +} + +curl -v -X POST \ + http://192.168.3.5:8081/api/v1/user/login \ + -H "Content-Type: application/json" \ + -d '{ + "username": "amass", + "password": "123456", + "remember_me": true + }' + + +{ + "code": 200, + "message": "login success", + "data": { + "user_id": "U123456789" + } +} +``` + + + +```json +//接口: /api/v1/user/logout + +{ + "code": 200, + "message": "logout success", +} +``` + + + + + +```json +//接口: /api/v1/user/verify +// Cookie: auth= + +{ + "code": 200, + "message": "会话有效", + "data": { + "user_id": "U123456789", + "session_expire": 1669987200 + } +} +``` + + + +一般在Web应用前后端实现中,如何传输账号密码以及保存和后续验证?请给出经典应用方案。 + +用户注册的时候,前端需要把账号密码发送到后端。这里的关键是传输过程的安全,所以必须用HTTPS,不能是明文传输。 + +后端收到密码后,不能直接存明文,得做哈希处理,并且加盐。比如用bcrypt这样的算法,因为它是专门为密码存储设计的,速度慢,可以抵御暴力破解。盐值要每个用户独立生成,这样即使两个用户密码相同,哈希值也不同。 + +然后是登录时的验证。用户输入账号密码后,前端同样通过HTTPS发送到后端。后端根据用户名找到对应的用户记录,取出盐值和哈希后的密码,然后用相同的算法对用户输入的密码进行哈希,比较两者是否一致。如果一致,就生成一个会话或者Token返回给前端,比如JWT。之后的前端请求可以带着这个Token,后端验证Token的有效性来处理后续请求。 + +表名:users + +| 字段名 | 数据类型 | 约束条件 | 解释 | +| ------------- | -------- | ----------------------------------- | ----| +| id | INTEGER | NOT NULL,PRIMARY KEY,AUTO_INCREMENT | 主键 | +| username | TEXT | UNIQUE,NOT NULL | | +| password_hash | BLOB | NOT NULL | | +| salt | BLOB | NOT NULL | | +| created_at | INTEGER | NOT NULL | | + + + ## Live2D 模型添加 在 XML 配置文件定义`Live2dModelsRoot` 字段,值默认为 `resources/live2d`。