Exemple #1
0
        public async Task <ViewResult> ConfirmEmail(string token)
        {
            var tokenInEmail = UserEmailToken.ExtractFromQueryString(token);

            if (tokenInEmail == null)
            {
                _logger.LogWarning("确认邮件地址失败:{@EmailConfirmation}", new { Token = token, Result = "无法识别提供的 token" });
                return(View(false));
            }

            var result = await _userService.ConfirmEmailAsync(tokenInEmail);

            _logger.LogIdentityResult("确认邮件地址", result, tokenInEmail.UserId);
            return(View(result.Succeeded));
        }
Exemple #2
0
        public async Task <ViewResult> ConfirmEmail(string token)
        {
            var tokenInEmail = token == null ? null : UserEmailToken.ExtractFromUrlQueryString(token);

            if (tokenInEmail == null)
            {
                _logger.LogWarning("确认邮件地址失败:无法识别提供的 token");
                return(View(false));
            }

            var result = await _userService.ConfirmEmailAsync(tokenInEmail);

            _logger.LogIdentityResult("确认邮件地址", result);
            return(View(result.Succeeded));
        }
Exemple #3
0
        public void should_decode_encoded_url_query_string()
        {
            var emailToken = new UserEmailToken
            {
                UserId = 35,
                Token  = StringUtility.Random(32)
            };
            var encoded = emailToken.EncodeAsQueryString();


            var extracted = UserEmailToken.ExtractFromQueryString(encoded);

            Assert.Equal(35, extracted.UserId);
            Assert.Equal(emailToken.Token, extracted.Token);
        }
Exemple #4
0
        public void should_encode_as_url_query_string()
        {
            var emailToken = new UserEmailToken
            {
                UserId = 35,
                Token  = StringUtility.Random(32)
            };

            var encoded = emailToken.EncodeAsQueryString();


            var queryString = Encoding.ASCII.GetString(Convert.FromBase64String(encoded));
            var query       = QueryHelpers.ParseQuery(queryString);

            Assert.Equal("35", query["userid"]);
            Assert.Equal(emailToken.Token, query["token"]);
        }
        public async Task <IdentityResult> ConfirmEmailAsync(UserEmailToken tokenInEmail)
        {
            var user           = _userRepo.Get(tokenInEmail.UserId);
            var identityResult = await _userManager.ConfirmEmailAsync(user, tokenInEmail.Token);

            if (!identityResult.Succeeded)
            {
                return(identityResult);
            }

            if (IsEmailTakenByAnotherUser(tokenInEmail.UserId, user.EmailAddress))
            {
                user.EmailAddressConfirmed = false;
                _userRepo.Update(user);
                return(EmailTakenResult());
            }
            return(identityResult);
        }
        public IActionResult ResetPassword(ResetPasswordModel model)
        {
            ModelState.Clear();

            bool ret;
            var  userEmailToken = UserEmailToken.ExtractFromQueryString(model.Token);

            if (userEmailToken == null)
            {
                var errorMessage = "无法识别的凭证";
                ModelState.AddModelError(nameof(model.Token), errorMessage);
                _logger.LogWarning("重置密码失败:{@ResetPasswordAttempt}", new { model.Token, model.UserId, Result = errorMessage });
                return(View("ResetPassword", model));
            }

            model.Token  = userEmailToken.Token;
            model.UserId = userEmailToken.UserId;
            return(View(model));
        }
        public async Task SendEmailRetrievePasswordAsync(User user, string urlProtocol)
        {
            var token = await _userManager.GeneratePasswordResetTokenAsync(user);

            var model = new UserEmailToken {
                UserId = user.Id, Token = token
            };

            // ReSharper disable Mvc.ActionNotResolved
            // ReSharper disable Mvc.ControllerNotResolved
            var resetUrl = _urlHelper.Action(
                "ResetPassword",
                "Account",
                new { token = model.EncodeAsQueryString() },
                protocol: urlProtocol);

            var emailBody = _resetPasswordEmailBuilder.BuildEmailBody(user.DisplayName, resetUrl);
            await _emailDeliveryMethod.SendEmailAsync(user.EmailAddress, "dotnet club 用户密码重置", emailBody);
        }
Exemple #8
0
        public IActionResult ResetPassword(ResetPasswordModel model)
        {
            if (_idpOptions.IsEnabled)
            {
                _logger.LogWarning("重置密码失败:{@ResetPasswordAttempt}", new { model.Token, Result = "启用外部身份服务时,禁止使用本地重置密码功能" });
                return(BadRequest());
            }

            ModelState.Clear();

            var userEmailToken = UserEmailToken.ExtractFromQueryString(model.Token);

            if (userEmailToken == null)
            {
                var errorMessage = "无法识别的凭证";
                ModelState.AddModelError(nameof(model.Token), errorMessage);
                _logger.LogWarning("重置密码失败:{@ResetPasswordAttempt}", new { model.Token, model.UserId, Result = errorMessage });
                return(View("ResetPassword", model));
            }

            model.Token  = userEmailToken.Token;
            model.UserId = userEmailToken.UserId;
            return(View(model));
        }
        public async Task SendEmailConfirmationMailAsync(User user, string urlProtocol)
        {
            if (user.EmailAddressConfirmed)
            {
                throw new UserEmailAlreadyConfirmedException(user.UserName);
            }

            var tokenString = await _userManager.GenerateEmailConfirmationTokenAsync(user);

            var tokenInEmail = new UserEmailToken {
                UserId = user.Id, Token = tokenString
            };

            // ReSharper disable Mvc.ActionNotResolved
            // ReSharper disable Mvc.ControllerNotResolved
            var callbackUrl = _urlHelper.Action(
                "ConfirmEmail",
                "User",
                new { token = tokenInEmail.EncodeAsUrlQueryString() },
                protocol: urlProtocol);

            var emailBody = _confirmationEmailBuilder.BuildEmailBody(user.DisplayName, callbackUrl);
            await _emailDeliveryMethod.SendEmailAsync(user.EmailAddress, "dotnet club 用户邮件地址确认", emailBody);
        }