微信小程序登录-后端逻辑

service层的主要代码:

public LoginVo login(UserLoginRequestDto userLoginRequestDto) {
    //1.调用微信开放平台小程序的api--code2Session,根据code获取openId
    String openId = wechatService.getOpenId(userLoginRequestDto.getCode());

    //2.根据openId查询用户
    Member member = getByOpenId(openId);

    //3.用户为null,新增,需要构建新的member对象,并设置openId; 不为null,老用户
    member = ObjectUtil.isNotEmpty(member) ? member : Member.builder()
            .openId(openId)
            .build();

    //4.调用微信开放平台小程序的api,获取手机号(得先调用获得token)
    String phone = wechatService.getPhone(userLoginRequestDto.getPhoneCode());

    //5.新用户绑定手机号;老用户更新手机号(手机号与数据库不一致)
    if(ObjectUtil.notEqual(member.getPhone(),phone)){
        member.setPhone(phone);//更新手机号
        saveOrUpdate(member); //新用户新增,老用户更新
    }

    //6.jwt生成token,封装对象,返回结果
    Map<String, Object> claims = new HashMap<>();
    claims.put(Constants.JWT_USERID, member.getId());
    claims.put(Constants.JWT_USERNAME, member.getName());
     //调用写好的工具包,生成token   
    String token = JwtUtil.createJWT(jwtTokenManagerProperties.getBase64EncodedSecretKey(), jwtTokenManagerProperties.getTtl(), claims);
    //封装对象    
    LoginVo loginVo = new LoginVo();
    loginVo.setToken(token);
    loginVo.setNickName(member.getName());
    return loginVo;
}
//根据id判断用户是否存在  新用户新增,老用户更新
private void saveOrUpdate(Member member) {
//        判断id存在  不存在则新增,否则是更新
        if (ObjectUtil.isNotEmpty(member.getId())) {
            memberMapper.update(member);//老用户更新
            return;
        }
//        保存新的用户
        //随机组装用户名,词组+手机号后四位
        String nickName = DEFAULT_NICKNAME_PREFIX.get((int) (Math.random() * DEFAULT_NICKNAME_PREFIX.size()))
                + StringUtils.substring(member.getPhone(), 7);
        member.setName(nickName);
        memberMapper.insert(member);//新用户新增
    }

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值