コード例 #1
0
        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("/"));
        }
コード例 #2
0
        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("/"));
        }
コード例 #3
0
        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);
        }