用户登陆逻辑 4 months ago
1907个字符
共有44人围观
以下是一个通用的用户登录完整逻辑,涵盖前后端交互的主要步骤:
用户登录完整逻辑
1. 前端输入阶段
- 用户界面:用户打开登录页面,页面通常包含用户名(或邮箱/手机号)和密码输入框,以及“登录”按钮。
- 输入验证:
- 检查用户名和密码是否为空。
- 可选:检查用户名格式(例如邮箱格式是否正确)或密码长度是否符合要求(如至少8位)。
- 如果输入不符合要求,前端提示错误(如“请输入用户名”或“密码太短”),避免不必要的后端请求。
2. 数据提交阶段
- 用户操作:用户填写完信息后,点击“登录”按钮。
- 前端处理:
- 将用户名和密码封装成请求数据(通常是JSON格式,如
{ "username": "user123", "password": "pass123" }
)。 - 通过HTTP请求(通常是POST方法)将数据发送到后端API端点(例如
/api/login
)。 - 可选:显示“加载中”状态,防止用户重复点击。
- 将用户名和密码封装成请求数据(通常是JSON格式,如
3. 后端验证阶段
- 接收请求:后端接收前端发送的用户名和密码。
- 数据校验:
- 检查用户名是否存在于数据库中。
- 如果不存在,返回错误响应(如
400 Bad Request
,附带消息“用户不存在”)。
- 密码验证:
- 从数据库中获取该用户名的加密密码(通常是哈希值,如使用bcrypt存储)。
- 使用相同的加密算法对用户输入的密码进行加密,比较结果是否匹配。
- 如果不匹配,返回错误响应(如
401 Unauthorized
,附带消息“密码错误”)。
- 账户状态检查:
- 确认账户是否被禁用、锁定或需要额外验证(如邮箱未激活)。
- 如果有问题,返回相应错误(如“账户已锁定”)。
4. 登录成功处理
- 生成会话令牌:
- 如果验证通过,后端生成一个唯一的会话标识(如JWT令牌或其他形式的Token)。
- JWT示例:
{ "user_id": 123, "username": "user123", "exp": "2025-03-06T00:00:00Z" }
,并签名后返回。
- 返回响应:
- 后端返回成功状态码(如
200 OK
)和令牌,前端接收后存储令牌(通常存入浏览器的localStorage或cookie中)。
- 后端返回成功状态码(如
- 可选:返回用户信息(如用户名、头像等),供前端显示。
5. 前端跳转阶段
- 处理响应:
- 前端接收到成功响应后,解析令牌和用户信息。
- 将用户重定向到主页或个人仪表盘。
- 错误处理:
- 如果后端返回错误,前端显示对应提示(如“用户名或密码错误”)。
6. 维持登录状态
- 令牌使用:
- 在后续请求中,前端在HTTP头中携带令牌(如
Authorization: Bearer <token>
)。 - 后端验证令牌的有效性,确保用户已登录。
- 在后续请求中,前端在HTTP头中携带令牌(如
- 过期处理:
- 如果令牌过期,后端返回
401 Unauthorized
,前端跳转到登录页面并提示“会话已过期,请重新登录”。
- 如果令牌过期,后端返回
7. 退出登录
- 用户操作:用户点击“退出”按钮。
- 前端清理:删除本地存储的令牌。
- 后端处理:可选,后端将该令牌加入黑名单(如果使用无状态令牌如JWT,则通常只依赖前端清理)。
- 跳转:返回登录页面。
示例流程图(文字版)
开始
↓
用户输入用户名和密码
↓
前端验证输入格式 → 不通过 → 显示错误
↓
通过 → 发送POST请求到后端
↓
后端验证用户名 → 不存在 → 返回“用户不存在”
↓
存在 → 验证密码 → 不匹配 → 返回“密码错误”
↓
匹配 → 检查账户状态 → 被锁定 → 返回“账户已锁定”
↓
正常 → 生成令牌 → 返回前端
↓
前端存储令牌 → 跳转主页
↓
结束
附加功能(可选)
- 记住我:通过延长令牌有效期或使用持久化cookie实现。
- 两步验证(2FA):登录后要求输入验证码(短信/邮件/应用生成)。
- 防止暴力破解:限制同一IP或用户的错误尝试次数,超出后临时锁定。
- 上一篇: golang版终端进度条