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)); }
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)); }
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); }
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); }
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); }