package forget import ( "context" "time" "bsm/full/module/base/passport/internal/impl" "bsm/full/module/base/passport/internal/models" "bsm/full/module/base/passport/internal/vars" pb "bsm/full/module/base/passport/pb" "git.apinb.com/bsm-sdk/core/errcode" "git.apinb.com/bsm-sdk/core/printer" ) // 验证手机号和验证码 func Verify(ctx context.Context, in *pb.ForgetVerifyRequest) (reply *pb.StatusReply, err error) { if in.Phone == "" || in.Code == "" { return nil, errcode.ErrInvalidArgument } pa, err := models.GetPassportAccountByField("phone", in.Phone) if err != nil { return nil, err } if pa.Status == vars.Status_Disable { return nil, errcode.ErrPermissionDenied } // 真实校验短信验证码(一次性) if err := models.VerifySmsCode(ctx, in.Phone, in.Code); err != nil { return nil, err } // 校验通过后写入一次性重置票据,供 Reset 改密前校验,10 分钟有效 resetKey := vars.ForgetResetTokenPrefix + pa.Identity if err := impl.RedisService.Client.Set(impl.RedisService.Ctx, resetKey, "1", 10*time.Minute).Err(); err != nil { printer.Error("Set forget reset token by identity %v error:%v", pa.Identity, err) return nil, errcode.ErrInternal } return &pb.StatusReply{ Timeseq: time.Now().UnixMilli(), }, nil }