public async Task <IActionResult> DoRegister(UserViewModel registerModel) { if (_idpOptions.IsEnabled) { _logger.LogWarning("用户注册失败:{@RegisterAttempt}", new { registerModel.UserName, Result = "启用外部身份服务时,禁止注册本地账号" }); return(BadRequest()); } if (!ModelState.IsValid) { _logger.LogInformation("用户注册失败:{@RegisterAttempt}", new { registerModel.UserName, Result = "数据格式不正确" }); return(View("Register")); } if (!_settings.CanRegisterNewUsers()) { const string errorMessage = "已关闭用户注册"; _logger.LogWarning("用户注册失败:{@RegisterAttempt}", new { registerModel.UserName, Result = errorMessage }); ModelState.AddModelError("UserName", errorMessage); return(View("Register")); } var newUser = new User { UserName = registerModel.UserName, DisplayName = registerModel.UserName, CreatedAtUtc = _clock.Now.UtcDateTime, LastSeenAt = _clock.Now.UtcDateTime }; var result = await _userManager.CreateAsync(newUser, registerModel.Password); if (!result.Succeeded) { var errorMessage = string.Join(";", result.Errors.Select(err => err.Description)); ModelState.AddModelError("UserName", errorMessage); _logger.LogWarning("用户注册失败:{@RegisterAttempt}", new { registerModel.UserName, Result = errorMessage }); return(View("Register")); } _logger.LogInformation("用户注册成功:{@RegisterAttempt}", new { registerModel.UserName, UserId = newUser.Id }); await _signInManager.PasswordSignInAsync( registerModel.UserName, registerModel.Password, isPersistent : false, lockoutOnFailure : true); return(RedirectTo("/")); }
public async Task <IActionResult> DoRegister(UserViewModel registerModel) { if (!ModelState.IsValid) { _logger.LogInformation($"用户注册失败:用户名 {registerModel.UserName}:数据格式不正确。"); return(View("Register")); } if (!_settings.CanRegisterNewUsers()) { const string errorMessage = "已关闭用户注册"; _logger.LogWarning($"用户注册失败:用户名 {registerModel.UserName}:{errorMessage}"); ModelState.AddModelError("UserName", errorMessage); return(View("Register")); } var newUser = new User { UserName = registerModel.UserName, DisplayName = registerModel.UserName, CreatedAtUtc = _clock.Now.UtcDateTime }; var result = await _userManager.CreateAsync(newUser, registerModel.Password); if (!result.Succeeded) { var errorMessage = string.Join(";", result.Errors.Select(err => err.Description)); ModelState.AddModelError("UserName", errorMessage); _logger.LogWarning($"用户注册失败:用户名 {registerModel.UserName}:{errorMessage}"); return(View("Register")); } _logger.LogInformation($"新用户注册:用户名 {registerModel.UserName}"); await _signInManager.PasswordSignInAsync( registerModel.UserName, registerModel.Password, isPersistent : false, lockoutOnFailure : true); return(RedirectTo("/")); }
public async Task <User> ImportNewUser(IList <Claim> claims, Claim userIdClaim) { var originalUserName = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.PreferredUserName)?.Value ?? userIdClaim.Value; var userName = string.Concat(originalUserName, "@", _idpOptions.ProviderId); if (!_siteSettings.CanRegisterNewUsers()) { const string errorMessage = "已关闭用户注册"; _logger.LogWarning("用户注册失败:{@RegisterAttempt}", new { username = userName, Result = errorMessage }); throw new InvalidOperationException(errorMessage); } var displayNameClaim = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.GivenName)?.Value ?? claims.FirstOrDefault(x => x.Type == JwtClaimTypes.NickName)?.Value; var emailClaim = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.Email)?.Value; var emailVerifiedClaim = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.EmailVerified)?.Value; var emailVerified = false; if (!string.IsNullOrEmpty(emailClaim) && Boolean.TryParse(emailVerifiedClaim, out emailVerified)) { // nothing to do... } var phoneNumberClaim = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.PhoneNumber)?.Value; VerifiedPhoneNumber verifiedPhoneNumber = null; var phoneNumberVerifiedClaim = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.PhoneNumberVerified)?.Value; if (!string.IsNullOrEmpty(phoneNumberClaim) && Boolean.TryParse(phoneNumberVerifiedClaim, out var phoneNumberVerified) && phoneNumberVerified) { verifiedPhoneNumber = new VerifiedPhoneNumber() { PhoneNumber = phoneNumberClaim }; _phoneNumberVerificationRepo.Save(verifiedPhoneNumber); } var user = new User { UserName = userName, DisplayName = string.IsNullOrWhiteSpace(displayNameClaim) ? originalUserName : displayNameClaim, CreatedAtUtc = _clock.Now.UtcDateTime, EmailAddress = emailClaim, EmailAddressConfirmed = emailVerified, OpenId = userIdClaim.Value, OpenIdProvider = _idpOptions.ProviderId, LastSeenAt = _clock.Now.UtcDateTime, PhoneNumberId = verifiedPhoneNumber?.Id }; var result = await _userManager.CreateAsync(user); if (!result.Succeeded) { var errorMessage = string.Join(";", result.Errors.Select(err => err.Description ?? err.Code)); _logger.LogWarning("用户注册失败:{@LoginAttempt}", new { UserName = userName, Result = errorMessage }); throw new InvalidOperationException(errorMessage); } _logger.LogInformation("用户注册成功:{@RegisterAttempt}", new { UserName = userName, UserId = user.Id }); return(user); }