介绍
基于redis实现邮件登录
引入依赖
ts
<dependency>
<groupId>cn.zvo.email</groupId>
<artifactId>email</artifactId>
<version>1.0</version>
</dependency>发送邮件
下面是一个发送随机验证码到指定邮箱,并存入redis中的示例:
ts
private static final String LOGIN_PREFIX = "loginCode";
public Boolean sendEmail(User user) {
String host = "smtp.163.com";
String username = "xxx@163.com"; //您的163邮箱
String password = "xxx"; //您的163邮箱授权码,不是邮箱密码
Email mail = new Email(host, username, password); //创建
String email = user.getEmail();
Random random = new Random();
int verificationCode = random.nextInt(900000) + 100000;
String codeKey = redisUtil.buildKey(LOGIN_PREFIX, user.getEmail());
redisUtil.setNx(codeKey, String.valueOf(verificationCode), 5L, TimeUnit.MINUTES);
String CodeContent = "您的注册验证码为:" + verificationCode + "该验证码5分钟内有效,请及时验证。";
mail.sendHtmlMail(email, "验证你的电子邮件地址", CodeContent);
return true;
}验证邮箱验证码并登录
ts
public SaTokenInfo elogin(User user) {
if (StringUtils.isBlank(user.getEmail()) || StringUtils.isBlank(user.getCode())) {
return null;
}
String tEmail = redisUtil.buildKey(LOGIN_PREFIX, user.getEmail());
String code = redisUtil.get(tEmail);
if (StringUtils.isBlank(code)) {
return null;
} else if (code.equals(user.getCode())) {
StpUtil.login(user.getEmail());
SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
log.info("登录成功!token{}", tokenInfo.getTokenValue());
return tokenInfo;
}
return null;
}拓展
可以发送html格式的邮件给用户
