用户使用手机号密码登录的接口实现

1、手机号密码登陆

      思路:写一个方法loginByPassword(String phone,String password)需要传入的参数是手机号和密码。先开始校验的是手机号:第 一步判断手机号是否为空,if(StringUtils.isEmpty(phone)){return ApiResult.error("手机号为空");}如果为空就出现error的提示信息,如果不为空就校验手机号使用的是正则表达式:^1[345678]\\d{9}$。接下来就是密码的校验。在控制层写一个方法validPassword(password),这样控制层就可以少写点代码,主要的校验在业务层,因为密码的校验是6-16位正则表达式:^\\w{6,16}$。手机号与密码校验结束之后,我们就需要把用户的信息都存入redis缓存中,这样就会避免用户的多次登录。主要实现的代码如下:

controller层的代码:
/**
	 * 密码登陆
	 * @param phone 手机号码
	 * @param password 密码
	 * @return
	 */
	@RequestMapping(value = "/PassLogin.json", method = RequestMethod.POST)
	@ApiOperation(value = "密码登陆接口", response = SendCodeType.class, notes = "密码登陆接口", httpMethod = "POST", produces = "application/json")
	@ApiResponses({ @ApiResponse(code = 1, message = "操作成功"),
			@ApiResponse(code = 0, message = "操作失败") })
	public @ResponseBody String loginByPassword(
			@ApiParam(required = true, value = "手机号码") @RequestParam("phone")String phone,
			@ApiParam(required = true, value = "密码") @RequestParam("password") String password) {
		//先判断手机号不能为空
		if(StringUtils.isEmpty(phone)){
			return ApiResult.error("手机号为空");
		}else {
			appUserService.checkPhone(phone);
		}
		appUserService.validPassword(password);
		AppUser user = appUserService.loginByPassword(phone, password);
		//取出登陆的信息存储到APIPrincipal实体中
		APIPrincipal principal  = new APIPrincipal();
		principal.setId(user.getId());
		principal.setPhone(user.getPhone());
		principal.setNickName(user.getNickname());
		principal.setPhoto(user.getPhoto());
		//还需要把鉴权码存储到实体中
		String authentication=APIPrincipal.UUID();
		principal.setAuthentication(authentication);
		//最终将这些字段存到缓存中
		this.redisService.save(principal.getCacheKey(),principal);
		return ApiResult.success(principal);
	}

接下来就是要介绍ServiceImpl的实现代码:

登录的验证:
@Override
	public AppUser loginByPassword(String phone, String password) {
		String sql = "select * from t_app_user where phone=#{p1} and password=md5(#{p2})";
		AppUser user = appUserDao.queryEx(new Sql(sql, phone, password));
		if(user == null){
			throw new GeneralException("手机号或密码错误");
		}
		if(user.getStatus()==0){
			throw new GeneralException("被禁用的账号");
		}
		return user;
	}

手机号码的校验:
@Override
	public boolean checkPhone(String phone) {
		String pho="^1[345678]\\d{9}$";
		boolean ph=phone.matches(pho);
		if(ph==false){
			throw new GeneralException("输入的手机号非法,请输入正确的手机号");
		}
		return ph;
	}


密码的校验:
@Override
	//手机密码登陆,密码的校验
	public boolean validPassword(String password) {
		String reg = "^\\w{6,16}$";
		boolean res = password.matches(reg);
		if(res == false){
			throw new GeneralException("密码格式错误,请输入6-16字符");
		}
		return res;
	}

 

你可能感兴趣的:(用户使用手机号密码登录的接口实现)