예제 #1
0
        public async Task <ActionResult> Login(LoginViewModel loginViewModel, string returnUrl)
        {
            if (this.ModelState.IsValid)
            {
                var signInStatus = await this.userIdentityApplicationService.SignInWithUsernameAndPasswordAsync(loginViewModel.Email, loginViewModel.Password, loginViewModel.RememberBrowserCookie, shouldLockout : false);

                switch (signInStatus)
                {
                case SignInStatus.Success:
                    return(this.RedirectToLocalUrl(returnUrl));

                case SignInStatus.LockedOut:
                    var lockoutViewModel = new LockoutViewModel(this.userIdentityProvider);

                    return(this.View("Lockout", lockoutViewModel));

                case SignInStatus.RequiresVerification:
                    return(this.RedirectToAction(nameof(this.SendCode), "Account", new { ReturnUrl = returnUrl, loginViewModel.RememberBrowserCookie }));

                case SignInStatus.Failure:
                default:
                    this.ModelState.AddModelError(string.Empty, Resource.AccountControllerLoginErrorMessage);
                    return(this.View(loginViewModel));
                }
            }

            return(this.View(loginViewModel));
        }
예제 #2
0
        public async Task <IActionResult> Lockout(string id, [Bind("Id, TermId, LockoutEnd")] LockoutViewModel model)
        {
            if (id == null || id != model.Id)
            {
                return(BadRequest());
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var user = await _userManager.FindByIdAsync(id);

            if (user == null)
            {
                return(BadRequest());
            }

            user.LockoutEnd = model.LockoutEnd;
            var result = await _userManager.UpdateAsync(user);

            if (!result.Succeeded)
            {
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
                return(View(model));
            }
            await _userManager.UpdateSecurityStampAsync(user);

            return(RedirectToAction(nameof(Index)));
        }
예제 #3
0
        public async Task <ActionResult> VerifyCode(VerifyCodeViewModel verifyCodeViewModel)
        {
            if (this.ModelState.IsValid)
            {
                var signInStatus = await this.userIdentityApplicationService.SignInWithTwoFactorAuthenticationAsync(verifyCodeViewModel.ProviderKey, verifyCodeViewModel.Code, verifyCodeViewModel.RememberBrowserCookie, verifyCodeViewModel.RememberBrowser);

                switch (signInStatus)
                {
                case SignInStatus.Success:
                    return(this.RedirectToLocalUrl(verifyCodeViewModel.ReturnUrl));

                case SignInStatus.LockedOut:
                    var lockoutViewModel = new LockoutViewModel(this.userIdentityProvider);

                    return(this.View("Lockout", lockoutViewModel));

                case SignInStatus.Failure:
                default:
                    this.ModelState.AddModelError(string.Empty, Resource.AccountControllerVerifyCodeErrorMessage);
                    return(this.View(verifyCodeViewModel));
                }
            }

            return(this.View(verifyCodeViewModel));
        }
        public async Task <IActionResult> Lockout(string id)
        {
            var user = await this.userManager.FindByIdAsync(id);

            var lockoutEnd = user.LockoutEnd.Value.DateTime;

            var lockoutModel = new LockoutViewModel {
                LockoutEnd = lockoutEnd
            };

            return(this.View(lockoutModel));
        }
예제 #5
0
        public async Task <ActionResult> Lockout(string userName)
        {
            var user = await UserManager.FindByNameAsync(userName);

            var date  = (await UserManager.GetLockoutEndDateAsync(user.Id)).DateTime;
            var model = new LockoutViewModel
            {
                UserName       = user.UserName,
                EndLockoutDate = date
            };

            return(View(model));
        }
예제 #6
0
        public async Task <ActionResult> ExternalLoginCallback(string returnUrl)
        {
            var userExternalLogin = await this.userIdentityApplicationService.GetUserExternalLoginAsync();

            if (userExternalLogin != null)
            {
                var signInStatus = await this.userIdentityApplicationService.SignInWithUserExternalLoginAsync(userExternalLogin, false);

                switch (signInStatus)
                {
                case SignInStatus.Success:
                    return(this.RedirectToLocalUrl(returnUrl));

                case SignInStatus.LockedOut:
                    var lockoutViewModel = new LockoutViewModel(this.userIdentityProvider);

                    return(this.View("Lockout", lockoutViewModel));

                case SignInStatus.RequiresVerification:
                    return(this.RedirectToAction(nameof(this.SendCode), "Account", new { ReturnUrl = returnUrl, RememberBrowserCookie = false }));

                case SignInStatus.Failure:
                default:
                    // If the user does not have an account, then prompt the user to create an account
                    var externalLoginConfirmationViewModel = new ExternalLoginConfirmationViewModel(this.userIdentityProvider)
                    {
                        Email         = userExternalLogin.Email,
                        ReturnUrl     = returnUrl,
                        LoginProvider = userExternalLogin.LinkedLogin.LoginProvider
                    };

                    return(this.View(nameof(this.ExternalLoginConfirmation), externalLoginConfirmationViewModel));
                }
            }

            return(this.RedirectToAction(nameof(this.Login), "Account"));
        }
예제 #7
0
        public async Task <IActionResult> Login(LoginViewModel model)
        {
            if (ModelState.IsValid)
            {
                // Check if we are in the context of an authorization request
                AuthorizationRequest context = await _interaction.GetAuthorizationContextAsync(model.ReturnUrl);

                var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, true, lockoutOnFailure : true);

                if (result.Succeeded)
                {
                    // Set language cookie
                    ApplicationUser user = await _userManager.FindByEmailAsync(model.Email);

                    await _events.RaiseAsync(new UserLoginSuccessEvent(user.UserName, user.Id.ToString(), user.UserName, clientId : context?.Client.ClientId));

                    Response.Cookies.Append(
                        CookieRequestCultureProvider.DefaultCookieName,
                        CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(user.Language)),
                        new CookieOptions
                    {
                        Expires     = DateTimeOffset.UtcNow.AddYears(1),
                        IsEssential = true,
                        Path        = "/",
                        HttpOnly    = false,
                        SameSite    = SameSiteMode.Strict
                    }
                        );

                    if (model.ReturnUrl != null)
                    {
                        return(RedirectToLocal(model.ReturnUrl));
                    }
                    return(RedirectToAction(nameof(HomeController.Overview), "Home"));
                }

                if (result.IsNotAllowed)
                {
                    await _events.RaiseAsync(new UserLoginFailureEvent(model.Email, "Email confirmation required", clientId : context?.Client.ClientId));

                    return(RedirectToAction(nameof(AccountController.Login), new { model.ReturnUrl, alert = LoginAlert.EmailConfirmationRequired }));
                }

                if (result.IsLockedOut)
                {
                    await _events.RaiseAsync(new UserLoginFailureEvent(model.Email, "Locked out", clientId : context?.Client.ClientId));

                    ApplicationUser user = await _userManager.FindByEmailAsync(model.Email);

                    var lockoutEnd = (DateTimeOffset)await _userManager.GetLockoutEndDateAsync(user);

                    var lockoutViewModel = new LockoutViewModel
                    {
                        LockoutEndMinutes = (int)(lockoutEnd.UtcDateTime - DateTime.UtcNow).TotalMinutes + 1
                    };
                    return(View("Lockout", lockoutViewModel));
                }
                else
                {
                    await _events.RaiseAsync(new UserLoginFailureEvent(model.Email, "Invalid credentials", clientId : context?.Client.ClientId));

                    ModelState.AddModelError(string.Empty, _localizer["InvalidLoginAttempt"]);
                    return(View(nameof(AccountController.Login), model));
                }
            }

            return(View(nameof(AccountController.Login), model));
        }