检查验证码的通用方法

前一篇例子讲到在发送验短信或者邮箱验证码的时候,生成验证码的同时在redis里面保存了一份,同时避免频繁发送验证码。

把验证码存到redis里面 检验验证码的时候就是检查前端传过来的code和redis里的code是否相等。

//Controller层
@ApiOperation(value = "检查验证码(L)")
    @ApiImplicitParam(name = "param", value = "校验验证码参数", required = true, dataType = "CheckCodeParam", paramType = "body")
    @PostMapping("check_code")
    public ResponseData checkCode(@RequestBody @Valid CheckCodeParam param, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return errorMsg(bindingResult);
        }
        return ResponseData.res(commonService.checkCode(param.getType(), param.getPhone(), param.getCode()), null);
    }

//Service层
@Override
    public ApiResult checkCode(Integer type, String phoneOrEmail, String code) {
        String prefix;
        if (SendCodeType.REGISTER.ordinal() == type) {
            prefix = RedisKeyPrefix.USER_REGISTER_PREFIX + phoneOrEmail;
        } else if (SendCodeType.FORGET_PWD.ordinal() == type) {
            prefix = RedisKeyPrefix.USER_FORGET_PWD_PREFIX + phoneOrEmail;
        } else if (type.equals(SendCodeType.BIND.ordinal())) {
            prefix = RedisKeyPrefix.USER_BIND_PHONE_PREFIX + phoneOrEmail;
        } else {
            prefix = RedisKeyPrefix.USER_UPDATE_PREFIX + phoneOrEmail;
        }
        if (!code.equals(redisTemplate.opsForHash().get(prefix, "code"))) {
            throw new BusinessException(ApiResult.UN_CORRECT_VERIFY_CODE);
        }
        return ApiResult.SUCCESS;
    }

redis前缀常量类

public class RedisKeyPrefix {

    /**
     * 用户登录token
     */
    public static final String LOGIN_TOKEN_KEY_PREFIX = "user:login:";

    /**
     * 注册验证码
     */
    public static final String USER_REGISTER_PREFIX = "user:register:code:";

    /**
     * 忘记密码验证码
     */
    public static final String USER_FORGET_PWD_PREFIX = "user:forgetPwd:code:";

    /**
     * 修改密码
     */
    public static final String USER_UPDATE_PREFIX = "user:updatePwd:code:";
    /**
     * 绑定手机号
     */
    public static final String USER_BIND_PHONE_PREFIX = "user:bindPhone:code:";

    /**
     * 提醒发货次数
     */
    public static final String ORDER_REMIND_SHIP_COUNT_PREFIX = "sw:orderRemindShipCount:";

    public static final String SHARE_COOKBOOK_CODE = "sw:share:code:";

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值