コード例 #1
0
ファイル: LogInController.cs プロジェクト: Nazgaul/Spitball
        public async Task <ActionResult> PostAsync(
            [ModelBinder(typeof(CountryModelBinder))] string country,
            [FromBody] LoginRequest model,
            [FromHeader(Name = "User-Agent")] string agent,
            CancellationToken token)
        {
            var user = await _userManager.FindByEmailAsync(model.Email);

            if (user is null)
            {
                ModelState.AddModelError(nameof(model.Password), _localizer["BadLogin"]);
                return(BadRequest(ModelState));
            }

            agent = agent?.Substring(0, Math.Min(agent.Length, 255));
            var command = new AddUserLocationCommand(user, country, HttpContext.GetIpAddress(), model.FingerPrint, agent);
            var t1      = _commandBus.DispatchAsync(command, token);
            var t2      = _signInManager.CheckPasswordSignInAsync(user, model.Password, true);
            await Task.WhenAll(t1, t2);

            var result = t2.Result;

            if (result == SignInResult.Success)
            {
                await _userManager.ResetAccessFailedCountAsync(user);

                await _signInManager.SignInAsync(user, false);

                return(Ok(new { user.Country }));
            }


            if (result.IsLockedOut)
            {
                if (user.LockoutEnd == DateTimeOffset.MaxValue)
                {
                    ModelState.AddModelError(nameof(model.Password), _localizer["LockOut"]);
                    return(BadRequest(ModelState));
                }

                ModelState.AddModelError(nameof(model.Password), _localizer["TempLockOut"]);
                return(BadRequest(ModelState));
            }


            if (result.IsNotAllowed)
            {
                ModelState.AddModelError(nameof(model.Password), _localizer["NotAllowed"]);
                return(BadRequest(ModelState));
            }
            ModelState.AddModelError(nameof(model.Password), _localizer["BadLogin"]);
            return(BadRequest(ModelState));
        }
コード例 #2
0
        private async Task <ReturnSignUserResponse> MakeDecisionAsync(User user,
                                                                      bool isExternal,
                                                                      ReturnUrlRequest?returnUrl,
                                                                      CancellationToken token)
        {
            if (user.PhoneNumberConfirmed)
            {
                if (isExternal)
                {
                    await _signInManager.SignInAsync(user, false);

                    return(ReturnSignUserResponse.SignIn());
                    // return new ReturnSignUserResponse(false);
                }

                throw new ArgumentException();
            }

            if (user.PhoneNumber != null)
            {
                var t1 = _signInManager.TempSignIn(user);
                var t2 = _client.SendSmsAsync(user, token);

                await Task.WhenAll(t1, t2);

                return(new ReturnSignUserResponse(RegistrationStep.RegisterVerifyPhone, new
                {
                    phoneNumber = user.PhoneNumber
                }));
            }

            if (user.EmailConfirmed)
            {
                await _signInManager.TempSignIn(user);

                return(new ReturnSignUserResponse(RegistrationStep.RegisterSetPhone));
            }

            await GenerateEmailAsync(user, returnUrl, token);

            return(new ReturnSignUserResponse(RegistrationStep.RegisterEmailConfirmed));
        }