admin管理员组文章数量:1602084
一、导入依赖
<!--mail短信依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
二、编写resources下的yml配置文件
spring:
mail:
host: smtp.qq
# 你的QQ邮箱,这里为发件人,填自己的即可
username: *********@qq
# 你的QQ邮箱授权码
password: ************
三、获取QQ邮箱授权码
1、打开QQ邮箱网页版点击设置
2、打开设置后点击账户
3、在账户页下拉找到POP3/SMTP服务开启获得授权码
4、要是忘记保存授权码点击这个也可以获得
5、把授权码编写到resources下的yml里即可
spring:
mail:
host: smtp.qq
# 你的QQ邮箱,这里为发件人,填自己的即可
username: *********@qq
# 你的QQ邮箱授权码
password: gcwo*******
四、编写业务
1、编写Service层的UserService
public interface UserService extends IService<User> {
//发送邮件
void sendMsg(String to,String subject,String text);
}
2、编写Service里Impl层的UserServiceImpl
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
//把yml配置的邮箱号赋值到from
@Value("${spring.mail.username}")
private String from;
//发送邮件需要的对象
@Autowired
private JavaMailSender javaMailSender;
//邮件发送人
@Override
public void sendMsg(String to, String subject, String text) {
//发送简单邮件,简单邮件不包括附件等别的
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(text);
//发送邮件
javaMailSender.send(message);
}
}
五、在拦截器放行验证码请求和登录请求
六、编写UserController层
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
@Autowired
private UserService userService;
//获取验证码
@PostMapping("/sendMsg")
public R<String> sendMsg(HttpSession session, @RequestBody User user){
//获取邮箱号
//相当于发送短信定义的String to
String email = user.getPhone();
String subject = "瑞吉外卖";
//StringUtils.isNotEmpty字符串非空判断
if (StringUtils.isNotEmpty(email)) {
//发送一个四位数的验证码,把验证码变成String类型
String code = ValidateCodeUtils.generateValidateCode(4).toString();
String text = "【瑞吉外卖】您好,您的登录验证码为:" + code + ",请尽快登录";
log.info("验证码为:" + code);
//发送短信
userService.sendMsg(email,subject,text);
//将验证码保存到session当中
session.setAttribute(email,code);
return R.success("验证码发送成功");
}
return R.error("验证码发送异常,请重新发送");
}
//登录
@PostMapping("/login")
//Map存JSON数据
public R<User> login(HttpSession session,@RequestBody Map map){
//获取邮箱,用户输入的
String phone = map.get("phone").toString();
//获取验证码,用户输入的
String code = map.get("code").toString();
//获取session中保存的验证码
Object sessionCode = session.getAttribute(phone);
//如果session的验证码和用户输入的验证码进行比对,&&同时
if (sessionCode != null && sessionCode.equals(code)) {
//要是User数据库没有这个邮箱则自动注册,先看看输入的邮箱是否存在数据库
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getPhone,phone);
//获得唯一的用户,因为手机号是唯一的
User user = userService.getOne(queryWrapper);
//要是User数据库没有这个邮箱则自动注册
if (user == null) {
user = new User();
user.setPhone(phone);
user.setStatus(1);
//取邮箱的前五位为用户名
user.setName(phone.substring(0,6));
userService.save(user);
}
//不保存这个用户名就登不上去,因为过滤器需要得到这个user才能放行,程序才知道你登录了
session.setAttribute("user", user.getId());
return R.success(user);
}
return R.error("登录失败");
}
}
七、编写移动端页面
下载移动端front替换在你的项目即可:
链接:https://pan.baidu/s/13R89uAiAdpoIWgugkzfKlw
提取码:1234
注、ValidateCodeUtils
版权声明:本文标题:瑞吉外卖QQ邮箱登录 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1725531262a1027956.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论