后端登录接口(demo)

发布时间:2022-08-17 13:29

前端获取到token,就算成功,后面前端的所有请求都会被后端拦截,判断是否token有效,并且在有效期内


关于短信验证码,已经在我的另一篇博客中了。传送门

实体类

package com.example.etf.story.paramer;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.util.Date;

@Data
public class NetInfoParam {//浏览器的相关信息,用户发送短信的时候用到
    private String ipNum;//用户ip
    private String phone;//他发送的手机号
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    private Date createTime;
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    private Date updateTime;
    private String country;
    private String region;//区域
    private String city;//城市
    private String status;//1为正常,2为封ip
    private String code;//验证码

}

controller中的方法

  @PostMapping("/signOrRegister")
    @ResponseBody
    public R signOrRegister(@RequestBody NetInfoParam netInfoParam, HttpServletRequest request){

        if(!clientService.isMobile(netInfoParam.getPhone())){
            return failed("请输入正确的手机号");
        }

        //判断库中验证码是否正确,并且没有超时
        NetInfoParam phoneCode = clientService.selectPhoneByCode(netInfoParam);
        if(phoneCode==null){
            return failed("验证码不匹配,或者验证码失效,请重新尝试");
        }

        //注册或登录
        //判断是否存在此手机号,不存在,则注册
        UserInfoParam userInfoParam = clientService.selectUserByPhone(netInfoParam.getPhone());

        if(userInfoParam==null){
            netInfoParam.setCreateTime(new Date());
            //调用注册
            clientService.insertUserInfo(netInfoParam);
        }

        //登录,获取用户基本信息
        userInfoParam = clientService.selectUserByPhone(netInfoParam.getPhone());

        //创建token
        String token = TokenUtils.token(userInfoParam.getPhone());
        //安全方面
        //phone从token中取,这样能防止,用户用自己的token去删除别人的信息
        //由于手机号绑定验证码,用户没法获取其他人的token
        userInfoParam.setToken(token);

        return ok(userInfoParam);

    }

service方法

   public NetInfoParam  selectPhoneByCode(NetInfoParam netInfoParam){
        TestClientMapper mapper = new SqlSessionF().getSqlSession().getMapper(TestClientMapper.class);
        //查询验证码是否过期,并且是否存在此验证码匹配的手机
        return mapper.selectPhoneByCode(netInfoParam);
    }

    public UserInfoParam selectUserByPhone(String phone){
        TestClientMapper mapper = new SqlSessionF().getSqlSession().getMapper(TestClientMapper.class);
        //查询此手机号是否注册过用户
        return mapper.selectUserByPhone(phone);
    }

    //注册
    public int insertUserInfo(NetInfoParam netInfoParam){
        TestClientMapper mapper = new SqlSessionF().getSqlSession().getMapper(TestClientMapper.class);
        return mapper.insertUserInfo(netInfoParam);
    }

mapper.xml

 NetInfoParam selectPhoneByCode(NetInfoParam netInfoParam);

    //判断是否注册,顺便获取用户user表基本信息
    UserInfoParam selectUserByPhone(String phone);

    //注册通过手机号
    int insertUserInfo(NetInfoParam netInfoParam);

sql.xml







    insert INTO `test_user`(user_name,create_time,phone)
    VALUES(#{phone},#{createTime},#{phone})

关于token中的方法,传送门

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号