自定义登录页
自定义登录页,可实现验证码登录与微信扫码登录等个性化登录场景
1. 创建登录页
创建登录页面,结构与逻辑根据业务自行定义(也可存放于非项目路径下,能通过 HTTP 访问即可)。
配置自定义登录页路径:
properties
# 支持 HTTP 路径或相对路径
erupt-app.loginPagePath: /xxx.html2. 调用登录接口获取 token
登录接口为 POST,参数通过 JSON 请求体(LoginBody)传递:
http
POST {{host}}/erupt-api/login
Content-Type: application/json
{
"account": "{{用户名}}",
"pwd": "{{密码}}",
"verifyCode": "{{验证码}}",
"verifyCodeMark": "{{验证码标识}}"
}响应结果:
json
{
"pass": true,
"resetPwd": false,
"useVerifyCode": false,
"reason": null,
"token": "jRP2ChJz8surtU2g",
"expire": "2026-01-01T12:00:00"
}resetPwd:是否需要强制修改密码(用户从未重置过密码时为true)expire:token 过期时间
注意事项
- 不希望启用验证码:在
application.yml中调整erupt-app.verifyCodeCount配置 - 不希望密码加密传输:在
application.yml中调整erupt-app.pwdTransferEncrypt配置 - 需要传递额外参数:通过自定义
@EruptLogin解析,详见自定义登录逻辑 - 密码传输编码:前端三次 Base64 编码
btoa(btoa(btoa(pwd))),后端自动解码,业务侧拿到的是明文
3. 跳转授权页面
登录成功后(pass === true),跳转到授权转发页面:
javascript
window.open("{{host}}/auth.html?token=" + token)授权成功后会自动跳转到系统首页。
WARNING
若登录页与 Erupt 应用不在同一域名下,需开启 redisSession 配置,否则 token 无法正常传递。
扩展 1:自定义参数解析
如需校验手机验证码等额外参数,建议重写登录逻辑,详见:自定义登录逻辑 @EruptLogin
扩展 2:自定义登录接口
提供通用的 token 注册方法,适用于不走 /login 接口的场景(如第三方扫码登录):
java
@RestController
public class LoginController {
@Resource
private EruptTokenService eruptTokenService;
@Resource
private EruptUserService eruptUserService;
@Resource
private EruptDao eruptDao;
@PostMapping("/login")
public String login() {
// 通过业务参数查询用户信息
EruptUser eruptUser = eruptDao.lambdaQuery(EruptUser.class)...
String token = RandomStringUtils.randomAlphanumeric(20);
eruptTokenService.loginToken(eruptUser, token);
eruptUserService.saveLoginLog(eruptUser, token); // 记录登录日志
return token;
}
}