两类用户
AdminUser 管理员用户,前端访问 yudao-ui-admin (opens new window)管理后台,后端访问 /admin-api/** RESTful API 接口。
MemberUser 会员用户,前端访问 yudao-ui-user (opens new window)用户 App,后端访问 /app-api/**
RESTful API 接口。
表
system_users 管理员用户
member_user 会员用户
system_oauth2_access_token 可以理解为汇总了关联用户, 记录user_id, 并用 user_type 区分( 对应 UserTypeEnum 的枚举)
获取当前登录的用户
在这个工具类里获取 SecurityFrameworkUtils
其实就是通过解析token获取到的, 在TokenAuthenticationFilter里会先解析好, 调用 SecurityFrameworkUtils.setLoginUser存到Spring Security里
后续获得用户就直接从 Security 的上下文获取
账号密码登录
管理后台的实现
/system/auth/login
AuthController#login
用账号和密码, 流程
- 看用户名是否存在
- 看密码是否对
- 看账号是否有效
- (看是否需要绑定社交账号)
- 创建token并记录日志
用户 App 的实现
/member/auth/login
AppAuthController#login
用手机和密码登录, 流程
- 看手机号是否存在
- 看密码是否对
- 看账号是否有效
- (看是否需要绑定社交账号)
- 创建token并记录日志
手机验证码登录
管理后台
发送验证码
/system/auth/send-sms-code
AuthController#sendSmsCode
流程
- 先看手机号是否存在
- 发送验证码
- 拿到system_sms_code表里手机号的最后那条发送数据
- 判断是否频繁发送
- 判断今天第几条是否超过上线
- 创建验证码
- 发送验证码
- 用redis的mq发送
验证码登录
/system/auth/sms-login
AuthController#smsLogin
流程
- 拿到手机号最后一条
- 判断是否超过时间
- 判断是否使用
- 更新验证码为使用
- 根据手机号获取用户信息
- 创建 Token 令牌,记录登录日志
用户 App
获取验证码
/member/auth/send-sms-code
AppAuthController#sendSmsCode
流程
- 考虑更新手机号和重置密码场景的判断
- 发送短信和上面差不多
手机登录
/member/auth/sms-login
流程
- 使用验证码的流程和上面差不多
- 用户不存在就创建, 存在就根据手机号返回
- 看是否需要绑定社交用户
- 创建 Token 令牌,记录登录日志
三方登录
/admin-api/system/auth/social-auth-redirect
获取三方平台的授权码
JustAuth 实现的
登录
用授权码登录
注册
后台
直接添加用户
/system/user/create
UserController#createUser
流程
- 操作租户(看不懂)
- 校验参数在数据库唯一性等
- 插入用户
- 插入关联岗位
app
/system/user/sms-login
登录如果没有账号会自动注册
登出
使用 Spring Security 框架,通过删除用户 Token 的方式来实现
AuthController#logout
流程
- header里找token
- 删除数据库的token和refreshToken
- 删除redis里的token
- 记录日志
AppAuthController#logout
同上