Beispiel #1
0
        public async Task <IActionResult> Login(LoginViewModel model)
        {
            string        apiStatus  = "successful_login";
            string        apiMessage = "Successful logged into CardCraft";
            CardCraftUser data       = null;

            //Add service code to login in and authenticate against database

            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout, set lockoutOnFailure: true
            var result = await SignManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure : false);

            if (result.Succeeded)
            {
                data = await UserManager.FindByEmailAsync(model.Email);

                Logger.LogInformation(1, APILog(endPoint: "Login", statusCode: "200", apiStatus: apiStatus, apiMessage: apiMessage, data: data));
                return(SuccessfulAPIResult(apiStatus, apiMessage, data));
            }
            if (result.RequiresTwoFactor)
            {
                apiStatus  = "user_requires_2FA";
                apiMessage = "Please complete sign up process by checking link in email: " + model.Email;
                return(SuccessfulAPIResult(apiStatus, apiMessage));
                //return RedirectToAction(nameof(SendCode), new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
            }
            if (result.IsLockedOut)
            {
                apiStatus  = "user_account_locked";
                apiMessage = "Your user account is locked please check " + model.Email + "for details.";
                Logger.LogWarning(2, "User account locked out.");
                return(SuccessfulAPIResult(apiStatus, apiMessage));
            }
            else
            {
                apiStatus  = "invalid_login_attempt";
                apiMessage = "Error logging you in. Please check email address or password.";
                ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                return(ErrorAPIResult(apiStatus, apiMessage));
            }

            //apiStatus = "invalid_login_attempt";
            //apiMessage = "There was an issue logging you in. Please try again later or email [email protected]";
            //ModelState.AddModelError(string.Empty, "Invalid login attempt.");
            //return ErrorAPIResult(apiStatus, apiMessage, model);
        }
        public async Task <IActionResult> Login(string returnUrl, LoginViewModel model)
        {
            if (User.Identity.IsAuthenticated)
            {
                return(RedirectToAction("Index", "Profile"));
            }

            if (ModelState.IsValid)
            {
                UserModel user = await ManageUser.FindByEmailAsync(model.Email);

                if (user != null && await ManageUser.CheckPasswordAsync(user, model.Password))
                {
                    if (await ManageUser.IsEmailConfirmedAsync(user))
                    {
                        var result = await SignManager.PasswordSignInAsync(user, model.Password, true, false);

                        if (result.Succeeded)
                        {
                            if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
                            {
                                return(LocalRedirect(returnUrl));
                            }
                            else
                            {
                                return(RedirectToAction("Index", "Home"));
                            }
                        }
                        else
                        {
                            ModelState.AddModelError("Error", result.ToString());
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("Error", "Email is not verified.");
                    }
                }
                else
                {
                    ModelState.AddModelError("Error", "Failed : Invalid Login Attempt");
                }
            }

            return(View(model));
        }