예제 #1
0
        public async Task <IActionResult> Login([FromBody] TmanagerLoginModel loginModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState.GetErrors()));
            }

            var user = await _userManager.FindByNameAsync(loginModel.UserName);

            var company_user = _context.Companys.FirstOrDefault(c => c.Id == user.CompanyId);

            if (!user.IsEnabled)
            {
                return(BadRequest("Account is blocked"));
            }
            if (user.Role != RoleValues.Admin.ToDescription() &&
                company_user != null && !company_user.Status)
            {
                return(BadRequest("Your company is blocked"));
            }

            var result = await _signInManager.PasswordSignInAsync(loginModel.UserName, loginModel.Password, loginModel.RememberMe, lockoutOnFailure : true);

            if (result.Succeeded)
            {
                string tokenResponse = await TokenProvider.ExecuteAsync(user, _userManager);

                return(Ok(new { token = tokenResponse }));
            }
            if (result.RequiresTwoFactor)
            {
                return(BadRequest("Requires Two Factor"));
            }
            if (result.IsLockedOut)
            {
                return(BadRequest("Is Locked Out"));
            }

            return(BadRequest());
        }