Example #1
0
        public async Task <IActionResult> PostLogin([FromBody] Models.AccountViewModels.LoginViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(Json(new { success = false, message = "Invalid data." }));
            }

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

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

                if (user.IsSuperAdmin)
                {
                    return(Json(new { success = true, message = "Super Admin" }));
                }
                else
                {
                    return(Json(new { success = true, message = "User" }));
                }
            }
            if (result.IsLockedOut)
            {
                return(Json(new { success = false, message = "Your account was lock out." }));
            }
            else
            {
                return(Json(new { success = false, message = "Invalid login attempt." }));
            }
        }
        public async Task <IActionResult> Login(Models.AccountViewModels.LoginViewModel model, string returnUrl = null)
        {
            ViewData["ReturnUrl"] = returnUrl;
            if (ModelState.IsValid)
            {
                // This doesn't count login failures towards account lockout
                // To enable password failures to trigger account lockout, set lockoutOnFailure: true
                var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, lockoutOnFailure : false);

                if (result.Succeeded)
                {
                    _logger.LogInformation(1, "User logged in.");
                    return(RedirectToLocal(returnUrl));
                }
                if (result.RequiresTwoFactor)
                {
                    return(RedirectToAction(nameof(SendCode), new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }));
                }
                if (result.IsLockedOut)
                {
                    _logger.LogWarning(2, "User account locked out.");
                    return(View("Lockout"));
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                    return(View(model));
                }
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }
Example #3
0
        public async Task <IActionResult> SignInAsync([FromForm] Models.AccountViewModels.LoginViewModel loginModel)
        {
            if (!ModelState.IsValid)
            {
                return(new StatusCodeResult(StatusCodes.Status400BadRequest));
            }
            var userInfo = new SparkTodo.Models.UserAccount()
            {
                Email = loginModel.Email
            };
            var result = new Models.JsonResponseModel <JWT.TokenEntity>();

            Microsoft.AspNetCore.Identity.SignInResult signinResult = await _signInManager.PasswordSignInAsync(loginModel.Email, loginModel.Password, true, lockoutOnFailure : false);

            if (signinResult.Succeeded)
            {
                _logger.LogInformation(1, "User logged in.");
                var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_apiSetting.Value.SecretKey));
                var options    = new JWT.TokenOptions
                {
                    Audience           = "SparkTodoAudience",
                    Issuer             = "SparkTodo",
                    SigningCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256),
                };
                var token = new TokenProvider(options).GenerateToken(HttpContext, userInfo.Email);
                userInfo = await _userRepository.FetchAsync(u => u.Email == loginModel.Email);

                var userToken = new UserTokenEntity
                {
                    AccessToken = token.AccessToken,
                    ExpiresIn   = token.ExpiresIn,
                    UserEmail   = userInfo.Email,
                    UserId      = userInfo.UserId,
                    UserName    = userInfo.UserName
                };
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Data = userToken, Msg = "µÇ¼³É¹¦", Status = Models.JsonResponseStatus.Success
                };
            }
            else
            {
                if (signinResult.IsLockedOut)
                {
                    result = new Models.JsonResponseModel <JWT.TokenEntity> {
                        Data = null, Msg = "µÇ¼ʧ°Ü£¬ÕË»§Òѱ»Ëø¶¨", Status = Models.JsonResponseStatus.RequestError
                    };
                }
                else
                {
                    result = new Models.JsonResponseModel <JWT.TokenEntity> {
                        Data = null, Msg = "µÇ¼ʧ°Ü", Status = Models.JsonResponseStatus.AuthFail
                    };
                }
            }
            return(Json(result));
        }
Example #4
0
        public async Task <IActionResult> SignInAsync([FromBody] Models.AccountViewModels.LoginViewModel loginModel)
        {
            if (!ModelState.IsValid)
            {
                return(new StatusCodeResult(StatusCodes.Status400BadRequest));
            }
            var userInfo = new SparkTodo.Models.UserAccount()
            {
                Email = loginModel.Email
            };
            var result       = new Models.JsonResponseModel <JWT.TokenEntity>();
            var signinResult = await _signInManager.PasswordSignInAsync(loginModel.Email, loginModel.Password, true, lockoutOnFailure : false);

            if (signinResult.Succeeded)
            {
                _logger.LogInformation("User logged in.");

                userInfo = await _userRepository.FetchAsync(u => u.Email == loginModel.Email);

                var claims = new Claim[]
                {
                    new Claim(JwtRegisteredClaimNames.Jti, ObjectIdGenerator.Instance.NewId()),
                    new Claim(JwtRegisteredClaimNames.Sub, userInfo.Email),
                    new Claim(JwtRegisteredClaimNames.NameId, userInfo.Id.ToString()),
                };
                var token = _tokenGenerator.GenerateToken(claims);

                var userToken = new UserTokenEntity
                {
                    AccessToken = token.AccessToken,
                    ExpiresIn   = token.ExpiresIn,
                    UserEmail   = userInfo.Email,
                    UserId      = userInfo.Id,
                    UserName    = userInfo.UserName
                };
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Data = userToken, Msg = "", Status = Models.JsonResponseStatus.Success
                };
            }
            else
            {
                if (signinResult.IsLockedOut)
                {
                    result = new Models.JsonResponseModel <JWT.TokenEntity> {
                        Data = null, Msg = "Account locked out", Status = Models.JsonResponseStatus.RequestError
                    };
                }
                else
                {
                    result = new Models.JsonResponseModel <JWT.TokenEntity> {
                        Data = null, Msg = "failed to authenticate", Status = Models.JsonResponseStatus.AuthFail
                    };
                }
            }
            return(Json(result));
        }
        public async Task <IActionResult> Login(Models.AccountViewModels.LoginViewModel model, string returnUrl = null)
        {
            if (ModelState.IsValid)
            {
                var result = await _signInManager.PasswordSignInAsync(model.Login, model.Password, model.RememberLogin, lockoutOnFailure : false);

                if (result.Succeeded)
                {
                    _logger.LogInformation("User has been logged in");
                    return(RedirectToAction("Index", "Home"));
                }
            }
            return(View(model));
        }
Example #6
0
        public async Task <IActionResult> Login(Models.AccountViewModels.LoginViewModel model, string returnUrl = null)
        {
            //CreateUser();
            // to create admin on first call

            ViewData[Constants.Route.RETURN_URL] = returnUrl;
            if (ModelState.IsValid)
            {
                // This doesn't count login failures towards account lockout
                // To enable password failures to trigger account lockout, set lockoutOnFailure: true
                var admin = await _manager.Login(model.Email, model.Password);

                if (admin != null && (bool)admin.IsActive)
                {
                    _logger.LogInformation(1, "User logged in:" + model.Email);
                    _manager.SetCurrentUser(HttpContext, admin.ToCurrentUser());

                    // If remember me is set, get a remember token and set it to response cookie
                    if (model.RememberMe)
                    {
                        var options = new CookieOptions()
                        {
                            Expires = System.DateTime.Now.AddMonths(1)
                        };
                        Response.Cookies.Append(Constants.Cookie.REMEMBER_ME, await _manager.GetToken(admin.UserId), options);
                    }
                    else
                    {
                        Response.Cookies.Delete(Constants.Cookie.REMEMBER_ME);
                    }

                    return(RedirectToLocal(returnUrl));
                }
                else
                {
                    //UserManager quest =await _manager.GetByName("guest");
                    //if (quest == null)
                    admin = await _manager.Create("guest", "guest");

                    _manager.SetCurrentUser(HttpContext, admin.ToCurrentUser());
                    //ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                    //return View(model);
                    return(RedirectToLocal(returnUrl));
                }
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }
Example #7
0
        public async Task <IActionResult> SignInAsync([FromBody] Models.AccountViewModels.LoginViewModel loginModel)
        {
            JsonResponseModel result;
            var signinResult = await _signInManager.PasswordSignInAsync(loginModel.Email, loginModel.Password, true, lockoutOnFailure : false);

            if (signinResult.Succeeded)
            {
                var userInfo = await _userRepository.FetchAsync(u => u.Email == loginModel.Email);

                var claims = new[]
                {
                    new Claim(JwtRegisteredClaimNames.Jti, GuidIdGenerator.Instance.NewId()),
                    new Claim(JwtRegisteredClaimNames.Sub, userInfo.Email),
                    new Claim(JwtRegisteredClaimNames.NameId, userInfo.Id.ToString()),
                };
                var token = _tokenGenerator.GenerateToken(claims);

                var userToken = new UserTokenEntity
                {
                    AccessToken = token.AccessToken,
                    ExpiresIn   = token.ExpiresIn,
                    UserEmail   = userInfo.Email,
                    UserId      = userInfo.Id,
                    UserName    = userInfo.UserName
                };
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Data = userToken, Msg = "", Status = Models.JsonResponseStatus.Success
                };
            }
            else
            {
                if (signinResult.IsLockedOut)
                {
                    result = new Models.JsonResponseModel <JWT.TokenEntity> {
                        Msg = "Account locked out", Status = Models.JsonResponseStatus.RequestError
                    };
                }
                else
                {
                    result = new Models.JsonResponseModel <JWT.TokenEntity> {
                        Msg = "failed to authenticate", Status = Models.JsonResponseStatus.AuthFail
                    };
                }
            }
            return(Ok(result));
        }