Esempio n. 1
0
        public async Task <object> Verification(PhoneVerificationRequest verificationRequest)
        {
            try
            {
                User user = await this._context.Users.FirstOrDefaultAsync(user => user.Id == verificationRequest.UserId);

                if (user.Role != RoleType.Unverified)
                {
                    return(new ResponseBase <string> {
                        Data = ResponseMessages.VerifiedUser
                    });
                }

                UserPublicData userData = await this._context.UsersPublicData.FirstOrDefaultAsync(user => user.UserId == verificationRequest.UserId);

                if (userData.SecretKey == verificationRequest.SecretKey && DateTime.Now < userData.SecretKeyValidTo)
                {
                    user.Role = RoleType.User;
                    await this._context.SaveChangesAsync();

                    return(new ResponseBase <string> {
                        Data = ResponseMessages.VerifiedUser
                    });
                }
                else
                {
                    userData.UnsuccessfullyVerificationAttempts++;
                    if (userData.UnsuccessfullyVerificationAttempts == 3)
                    {
                        userData.SecretKey = await this.SendMessageViaPhone(userData.User.Phone);

                        userData.SecretKeyValidTo = DateTime.Now.AddMinutes(SecretKeyToVerifyPhoneValidInMinutes);
                        userData.UnsuccessfullyVerificationAttempts = 0;

                        await this._context.SaveChangesAsync();

                        return(new ResponseBase <string> {
                            Status = ResponeStatusCodes.UnverifiedUser, Data = ResponseMessages.RepeatedVerification
                        });
                    }
                    await this._context.SaveChangesAsync();

                    return(new ResponseBase <string> {
                        Status = ResponeStatusCodes.BadRequest, Data = ResponseMessages.BadVerificationSecretKey
                    });
                }
            }
            catch (Exception ex)
            {
                return(new ResponseBase <string> {
                    Status = ResponeStatusCodes.UnexpectedServerError, Data = $"Oops... {ex.Message}"
                });
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 本接口用于校验手机号、姓名和身份证号的真实性和一致性。支持的手机号段详情请查阅<a href="https://cloud.tencent.com/document/product/1007/46063">运营商类</a>文档。
        /// </summary>
        /// <param name="req"><see cref="PhoneVerificationRequest"/></param>
        /// <returns><see cref="PhoneVerificationResponse"/></returns>
        public PhoneVerificationResponse PhoneVerificationSync(PhoneVerificationRequest req)
        {
            JsonResponseModel <PhoneVerificationResponse> rsp = null;

            try
            {
                var strResp = this.InternalRequestSync(req, "PhoneVerification");
                rsp = JsonConvert.DeserializeObject <JsonResponseModel <PhoneVerificationResponse> >(strResp);
            }
            catch (JsonSerializationException e)
            {
                throw new TencentCloudSDKException(e.Message);
            }
            return(rsp.Response);
        }
Esempio n. 3
0
        public async Task <ActionResult> Verification([FromBody] PhoneVerificationRequest verificationRequest)
        {
            var result = await _userService.Verification(verificationRequest : verificationRequest);

            return(new JsonResult(result));
        }