using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Traffic.Data.ViewModels; using Traffic.Service.Helpers; using Traffic.Service.Interfaces; namespace Traffic.Api.Controllers { [Route("api/login")] [ApiController] public class LoginController : ControllerBase { private readonly ILoginService _service; private readonly JwtHelpers _jwt; private IHttpContextAccessor _accessor; private readonly IConfiguration _configuration; public LoginController(ILoginService service, JwtHelpers jwt, IHttpContextAccessor accessor, IConfiguration configuration) { _service = service; _jwt = jwt; _accessor = accessor; _configuration = configuration; } /// /// 登入 /// /// /// [HttpPost("PostLogin")] public LoginResultModel PostLogin(LoginViewModel loginData) { var ip = _accessor.HttpContext?.Connection?.RemoteIpAddress?.ToString(); var result = new LoginResultModel(); var user = this._service.Login(loginData.Account, loginData.Password, ip); if (user == null) { result.Success = false; result.Message = "查無此使用者,請洽管理員。"; return result; } if (user.Status == 0) { result.Success = false; result.Message = "此使用者已被禁用,請洽管理員。"; return result; } if ((DateTime.Now - user.ChangePwdOn).Days > Convert.ToInt16(_configuration["User:NeedChangePwdDay"])) { result.Success = false; result.Message = $"已超過{_configuration["User:NeedChangePwdDay"]}天未更改密碼,請洽管理員。"; return result; } var errorCount = Convert.ToInt16(_configuration["User:LoginErrorCount"]); if (user.ErrorCount > errorCount) { result.Success = false; result.Message = $"輸入密碼已累積超過錯誤{errorCount}次,請洽管理員。"; return result; } if (user.ErrorCount != 0) { result.Success = false; result.Message = $"輸入密碼已累積錯誤{user.ErrorCount}次。"; return result; } if ((DateTime.Now - user.ChangePwdOn).Days > Convert.ToInt16(_configuration["User:AlarmChangePwdDay"])) { result.Success = true; result.Message = $"已超過{_configuration["User:AlarmChangePwdDay"]}天未更改密碼,請立即更改密碼。"; result.Token = this._jwt.GenerateToken(user); result.Role = user.Role; result.Name = user.Name; result.Id = user.Id; return result; } if (loginData.Password == "000000") { result.Success = true; result.Message = $"請立即更改密碼。"; result.Token = this._jwt.GenerateToken(user); result.Role = user.Role; result.Name = user.Name; result.Id = user.Id; return result; } result.Success = true; result.Message = "success!"; result.Token = this._jwt.GenerateToken(user); result.Role = user.Role; result.Name = user.Name; result.Id = user.Id; return result; } } }