public async Task Handle_ValidCommand_ShouldLoginSuccessfully(LoginOutput loginOutput) { // Arrange _mapperMock.Setup(m => m.Map <LoginOutput>(It.IsAny <User>())).Returns(loginOutput); // AutoMapper setup _appsettingMock.SetReturnsDefault(new AppSettings { Issuer = "key1", Secret = "kesdfaaaaaasffffffffy1" }); var sut = new LoginCommandHandler(_context, _mapperMock.Object, _appsettingMock.Object); // creating system under test var temUser = _fixture.Create <User>(); temUser.PasswordHash = "3pRTT3NlZJrki0wrSlmOjA=="; // Act await ContextOperation.CreateEntity(_context, temUser); var password = SecurityHelper.Decrypt(temUser.PasswordHash); var output = await sut.Handle(new LoginCommand { Email = temUser.Email, Password = password }, CancellationToken.None); // Assert Assert.True(!string.IsNullOrEmpty(output.Token)); }
public async Task <LoginOutput> Login(string cellPhoneOrEmail, string password) { var output = new LoginOutput { LoginResult = LoginResult.InvalidUserAccountOrEmail }; var tenant = await _globalAccountRepository.GetTenantByCellPhoneOrEmail(cellPhoneOrEmail); if (tenant == null) { return(output); } using (_unitOfWorkManager.Current.SetTenantId(tenant.PId)) { var user = await _userRepository.GetUserByCellPhoneOrEmail(cellPhoneOrEmail); if (user == null) { return(output); } user.UserLogin(password, output); if (output.LoginResult == LoginResult.Success) { tenant.CheckCanLogin(output); } } return(output); }
public async Task <LoginInput> Login(LoginOutput model) { return(await(Settings.BaseUrl + "/login") .AllowAnyHttpStatus() .PostJsonAsync(model) .ReceiveJson <LoginInput>()); }
public ApiResult <LoginOutput> PubLogin(LoginInput loginInput) { var loginOutput = new LoginOutput(); var apiResult = _messageApiClient.PubLogin(loginInput); if (apiResult.Status == ResultStatus.Success) { loginOutput.Session = apiResult.Result; if (!loginOutput.Session.openid.IsNullOrEmpty()) { // 如果有注册会员则返回注册会员 //var userDetail = Resolve<IUserDetailService>().GetSingle(r => r.OpenId == loginOutput.Session.openid); //if (userDetail != null) { // loginOutput.IsReg = true; // var user = Resolve<IUserService>().GetSingle(userDetail.UserId); // loginOutput.User = Resolve<IUserDetailService>().GetUserOutput(user.Id); //} } } else { var message = apiResult.Message; return(ApiResult.Failure <LoginOutput>($"登陆到微信服务器失败:{message}", MessageCodes.ReremoteRequest)); } return(ApiResult.Success(loginOutput)); }
public IHttpActionResult Login(LoginInput login) { if (String.IsNullOrWhiteSpace(login.username) || String.IsNullOrEmpty(login.username) || String.IsNullOrWhiteSpace(login.password) || String.IsNullOrEmpty(login.password)) { return(BadRequest()); } var user = db.Users.Where(u => u.username.Equals(login.username) && u.password.Equals(login.password)).FirstOrDefault(); var response = new LoginOutput(); if (user != null) { response.code = 200; response.message = "success"; response.firstname = user.firstname; response.lastname = user.lastname; response.username = user.username; response.token = user.rowguid.ToString(); return(Ok(response)); } response.code = 400; response.message = "User not found."; return(Content(HttpStatusCode.NotFound, response)); }
public static LoginOutput Login(string username, string password) { logger.Info($"Login request for user {username}"); LoginOutput output = new LoginOutput() { Result = LoginResult.Success, User = storage.Login(username, password) }; if (output.User == null) { output.Result = LoginResult.Failed; } else { int passwordDays = (int)DateTime.Now.Subtract(DateTimeHelper.GetFromUnixTimestamp(output.User.PasswordChanged)).TotalDays; if (passwordDays >= Settings.GetInt("PasswordLifetimeInDays")) { output.Result = LoginResult.PasswordExpired; } else { output.User.Properties = storage.LoadProperties(output.User); } } string json = JsonHelper.Serialize(output); logger.Info(json); return(output); }
/// <summary> /// 生成Tokne /// </summary> /// <param name="loginInput"></param> /// <returns></returns> public async Task <Result <TokenInfo> > CreateTokenAsync(LoginInput loginInput) { var user = await _masterFreeSql.GetRepository <Users, long>().Where(x => x.UserName == loginInput.UserName && x.Password == loginInput.Password).ToOneAsync(); if (user is null) { return(Result.FromCode <TokenInfo>(ResultCode.LoginFailed)); } var expireInterval = _configuration.GetSection("TokenExpireInterval").Value; var hour = int.TryParse(expireInterval, out int val) ? 1 : val; var userInfo = user.MapTo <UserInfo>(); var token = Guid.NewGuid().ToString("N"); var tokenInfo = new TokenInfo { ExpireTime = DateTime.Now.AddHours(hour), Token = token, }; var result = new LoginOutput { TokenInfo = tokenInfo, UserInfo = userInfo }; await RedisHelper.SetAsync(token, result, hour * 60 * 60); return(Result.FromData(tokenInfo)); }
public static object IssueToken(JwtSettings jwtSettings, LoginOutput output) { var authTime = DateTime.UtcNow; var expiresAt = authTime.AddDays(jwtSettings.Validity); var claim = new[] { new Claim(ClaimTypes.Sid, output.UserId.ToString()), new Claim(ClaimTypes.Name, output.User), new Claim(ClaimTypes.Role, output.Role) }; //对称秘钥 var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.SecretKey)); //签名证书(秘钥,加密算法) var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); //生成token [注意]需要nuget添加Microsoft.AspNetCore.Authentication.JwtBearer包,并引用System.IdentityModel.Tokens.Jwt命名空间 var token = new JwtSecurityToken(jwtSettings.Issuer, jwtSettings.Audience, claim, authTime, expiresAt, creds); return(new { token = new JwtSecurityTokenHandler().WriteToken(token), profile = new { sid = output.UserId.ToString(), name = output.User, role = output.Role, auth_time = new DateTimeOffset(authTime).ToUnixTimeSeconds(), expires_at = new DateTimeOffset(expiresAt).ToUnixTimeSeconds() } }); }
public override ApiHandlerOutput Process(ApiInputHandler input) { PasswordRequest request = GetEntity <PasswordRequest>(input); string username = request.Username; if (String.IsNullOrWhiteSpace(username)) { username = Context.Current.User.Username; } LoginOutput loginOutput = Business.User.Login(username, request.Old); if (loginOutput.Result == LoginResult.Failed) { throw new ApiAccessDeniedException(Messages.WrongPassword); } if (request.Old == request.New) { throw new ApplicationException(Messages.PasswordChangeSame); } if (request.New != request.Confirm) { throw new ApplicationException(Messages.PasswordDontMatch); } Business.User.ChangePassword(username, request.Old, request.New); return(GetOutput()); }
public IActionResult PostLogin([FromBody()] Login loginInfo) { LoginOutput output = new LoginOutput(); if (!ModelState.IsValid) { output.result = "驗證失敗!"; return(Ok(output)); } var user = _context.User.FirstOrDefault(x => x.UserId == loginInfo.userId && x.Password == loginInfo.password); if (user == null) { output.result = "帳號或密碼輸入錯誤!"; return(Ok(output)); } // 取得ClientIP string ClientIP = HttpContext.Connection.RemoteIpAddress.ToString(); // 產生Token var UToken = Guid.NewGuid().ToString().ToUpper(); // 設定token逾時分鐘數 int TimeoutMinute = 20; // 計算逾時時間 DateTime UtokenTime = DateTime.Now.AddMinutes(TimeoutMinute); // 刪除所有逾時Token資料 var timeoutToken = _context.Utoken.Where(x => x.UTokenTimeOut < DateTime.Now && x.UserId == user.UserId).ToList(); if (timeoutToken.Count > 0) { _context.Utoken.RemoveRange(timeoutToken); } // 新增本次登入token資料 Utoken newToken = new Utoken() { UserId = user.UserId, User = user, IP = ClientIP, UtokenId = UToken, LastInTime = DateTime.Now, UTokenTimeOut = UtokenTime }; _context.Utoken.Add(newToken); _context.SaveChanges(); output = new LoginOutput { result = "登入成功!", uToken = newToken.UtokenId }; return(Ok(output)); }
public ResponseModelBase <LoginOutput> CreateToken(LoginOutput login) { var dataCriacao = DateTime.UtcNow; var dataExpiracao = dataCriacao + TimeSpan.FromSeconds(_tokenConfiguration.Seconds); var claims = new List <Claim> { new Claim(ClaimTypes.NameIdentifier, login.PersonOutput.Id.ToString()), new Claim(ClaimTypes.Name, login.PersonOutput.Name) }; foreach (var role in login.PersonOutput.Roles) { claims.Add(new Claim(ClaimTypes.Role, role.Name)); } var token = new JwtSecurityToken( _tokenConfiguration.Issuer, _tokenConfiguration.Audience, claims, dataCriacao, dataExpiracao, _keyConfig.SigningCredentials); var jwt = new JwtSecurityTokenHandler().WriteToken(token); login.Token = jwt; return(new ResponseModelBase <LoginOutput>().OkResult(login, new List <string>())); }
public ResponseData ValidateUser(Login user) { EncryptDecrypt objEncDec = new EncryptDecrypt(); try{ ResponseData response = new ResponseData(); AccountDetails act = new AccountDetails(); var result = db.UserMaster.Where(x => x.UserName == user.username && x.Password == user.password).FirstOrDefault(); LoginOutput output = new LoginOutput(); if (result != null) { output.status = "True"; IQueryable <AccountDetails> output1 = db.AccountDetails.Where(x => x.Name == user.username); output.AccountId = output1.Select(x => x.AccountId).FirstOrDefault(); response.Data = output; return(response); } else { output.status = "False"; response.Data = output; response.Message = CustomMessage.InvalidCreds; response.Code = (int)HttpStatusCode.BadRequest; return(response); } } catch (Exception ex) { throw ex; } }
private void buttonLogin_Click(object sender, EventArgs e) { bool fieldsAreFilled = true; //verifica se usuario foi inserido if (textBoxUsuario.Text.Equals("")) { this.labelInsiraUsuario.Text = "Insira o usuário!"; this.labelInsiraUsuario.Visible = true; fieldsAreFilled = false; } else { this.labelInsiraUsuario.Visible = false; } //verifica se a senha foi inserida if (textBoxSenha.Text.Equals("")) { this.labelInsiraSenha.Text = "Insira a senha!"; this.labelInsiraSenha.Visible = true; fieldsAreFilled = false; } else { this.labelInsiraSenha.Visible = false; } if (fieldsAreFilled) { //tentar login do usuário LoginOutput loginOutput = repoUsuarios.ExecutaLogin(textBoxUsuario.Text, textBoxSenha.Text); switch (loginOutput) { case LoginOutput.Succeeded: this.textBoxUsuario.Text = ""; this.textBoxSenha.Text = ""; formPrincipal = new FormPrincipal(this); formPrincipal.Show(); this.Hide(); break; case LoginOutput.UserNotFound: this.labelInsiraUsuario.Text = "Usuário não encontrado!"; this.labelInsiraUsuario.Visible = true; break; case LoginOutput.WrongPassword: this.labelInsiraSenha.Text = "Senha incorreta!"; this.labelInsiraSenha.Visible = true; break; default: break; } } }
public JsonResult Login(LoginDto loginDto) { if (string.IsNullOrEmpty(loginDto.Account)) { return(Result(false, "用户名不能为空")); } if (string.IsNullOrEmpty(loginDto.Password)) { return(Result(false, "密码不能为空")); } var output = new LoginOutput(); SysLog sysLog = new SysLog(); try { var user = _sysUserService.LoginValidate(loginDto.Account.Trim(), loginDto.Password.Trim()); if (user != null) { output.Id = user.Id; output.Account = user.Account; output.RealName = user.RealName; #region 更新用户登录信息 user.Id = user.Id; user.LoginCount++; if (user.FirstVisit == null) { user.FirstVisit = DateTime.Now; } user.LastVisit = DateTime.Now; _sysUserService.UpdateUserLoginInfo(user); #endregion sysLog.LogStatus = (int)LogStatusType.Success; } else { sysLog.LogStatus = (int)LogStatusType.Fail; return(Result(false, "用户名或密码错误")); } #region 登录日志 sysLog.IpAddress = ""; sysLog.LogType = LogTypeType.Login.ToString(); sysLog.Remark = ""; _sysLogService.InsertLog(sysLog); #endregion } catch (Exception ex) { return(Result(false, "登录异常" + ex)); } return(GetToken(output)); }
/// <summary> /// 登录接口 /// </summary> /// 作者:赵雪峰 20160906 public bool Login(LoginInput input, ref LoginOutput output, ref string errMsg) { bool doLogin = HttpCommonMethod <LoginInput, LoginOutput>("/antuser/user.login.do", GlobalVariable.RequestMethod.POST, input, ref output, ref errMsg); if (doLogin && output.result == (int)GlobalVariable.Result.Failure) { errMsg = string.IsNullOrEmpty(output.errorCode) ? "登录失败" : resources.GetString("E_" + output.errorCode); return(false); } return(doLogin); }
private JsonResult GetToken(LoginOutput output) { var token = _userToken.Create(new[] { new Claim(LoginUserDto.Id.ToString(), output.Id.ToString()), new Claim(LoginUserDto.Account, output.Account), new Claim(LoginUserDto.RealName, output.RealName), }); return(Result(new { token })); }
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); string wechatLoginKey = ConfigurationManager.AppSettings["wxLoginKey"]; var identity = new ClaimsIdentity("JWT"); #region 系统登录 using (var userService = IocManager.Instance.ResolveAsDisposable <IUserService>()) { LoginOutput output = userService.Object.Login(new LoginInput { Password = context.Password, UserName = context.UserName }); if (!output.Id.HasValue) { context.SetError("invalid_grant", "账户或密码错误"); return(Task.FromResult <object>(null)); } identity.AddClaim(new Claim("UserId", output.Id.ToString())); identity.AddClaim(new Claim("UserName", output.UserName)); string targetName = !string.IsNullOrEmpty(output.ActualName) ? output.ActualName : output.Nickname; identity.AddClaim(new Claim("NickName", !string.IsNullOrEmpty(targetName) ? targetName : "")); identity.AddClaim(new Claim("UserType", output.UserType.ToString())); identity.AddClaim(new Claim("RoleId", output.RoleId.ToString())); identity.AddClaim(new Claim("Role", output.Role)); } #endregion var props = new AuthenticationProperties(new Dictionary <string, string> { { "audience", context.ClientId ?? string.Empty } }); var ticket = new AuthenticationTicket(identity, props); context.Validated(ticket); return(Task.FromResult <object>(null)); }
private string GetJwtToken(LoginOutput loginOutput) { //如果是基于用户的授权策略,这里要添加用户;如果是基于角色的授权策略,这里要添加角色 var claims = new List <Claim> { new Claim(ClaimTypes.Name, loginOutput.LoginName), new Claim(JwtRegisteredClaimNames.Sid, loginOutput.Id.ToString()), new Claim(ClaimTypes.Expiration, DateTime.Now.AddSeconds(_jwtSetting.Value.ExpireSeconds).ToString(CultureInfo.InvariantCulture)), new Claim(ClaimTypes.Role, "Type"), new Claim("mobile", loginOutput.Mobile) }; var token = JwtHelper.BuildJwtToken(claims.ToArray(), _jwtSetting); return(token); }
public override ApiHandlerOutput Process(ApiInputHandler input) { LoginRequest request = GetEntity <LoginRequest>(input); LoginOutput loginOutput = Business.User.Login(request.Username, request.Password); if (loginOutput.Result == LoginResult.Failed) { throw new ApiAccessDeniedException(Messages.LoginFailed); } else if (loginOutput.Result == LoginResult.PasswordExpired) { throw new ApiAccessDeniedException(Messages.PasswordExpired); } LoginResponse response = new LoginResponse() { Output = loginOutput }; if (request.Bearer == "true" && loginOutput.User != null) { string secret = HashHelper.GetSha256(request.Password); var p = loginOutput.User.Properties; loginOutput.User.Properties.Clear(); string token = JwtBuilder.Create() .WithAlgorithm(new HMACSHA256Algorithm()) .WithSecret(secret) .AddClaim("exp", DateTimeOffset.UtcNow.AddHours(12).ToUnixTimeSeconds()) .AddClaim("user", response.Output.User) .Encode(); logger.Debug($"token generated: {token}"); Business.User.SaveBearer(loginOutput.User.Id, token); response.Bearer = token; loginOutput.User.Properties = p; } input.Context.Session.Set(response.Output.User); return(GetOutput(response)); }
public void CheckCanLogin(LoginOutput output) { Ensure.NotNull(output, nameof(output)); output.TenantId = PId; output.TenantName = TenantName; output.TenantOutDate = EndTime; if (!IsActive) { output.LoginResult = LoginResult.TenantIsNotActive; return; } if (Clock.Now > EndTime) { output.LoginResult = LoginResult.TenantOutDate; } }
private void loginCallback(LoginOutput output) { this.Dispatcher.BeginInvoke(delegate() { if (output.status == "ok") { server.sid = output.sid; MDEDB.SubmitChanges(); MessageBox.Show("Logged in on server."); joinMeeting(); } else { MessageBox.Show("Login or password incorrect."); } }); }
public LoginOutput Login([Required] string Code) { string apiUrl = string.Format(wxLoginApi, ConfigurationManager.AppSettings["wxAppid"], ConfigurationManager.AppSettings["wxAppsercret"], Code); JavaScriptSerializer js = new JavaScriptSerializer(); WechatLoginMsg msg = js.Deserialize <WechatLoginMsg>(HttpHelper.HttpGet(apiUrl)); if (!string.IsNullOrWhiteSpace(msg.Openid) && !string.IsNullOrWhiteSpace(msg.Session_key)) { LoginOutput output = _userAppService.WechatLogin(new WechatLoginInput { Openid = msg.Openid, Session_key = msg.Session_key }); return(output); } else { throw new UserFriendlyException(msg.Errcode, msg.Errmsg); } }
private void loginCallback(LoginOutput output) { this.Dispatcher.BeginInvoke(delegate() { setControlEnabled(true); if (output.status == "ok") { var servers = new ObservableCollection <Server>(from Server s in MDEDB.Servers where s.serverName == serverNameBox.Text select s); Server server; if (servers.Count() > 0) { //We are here right after registration. We should only add sid. server = servers[0]; server.sid = output.sid; MDEDB.SubmitChanges(); NavigationService.GoBack(); } else { server = new Server(); MDEDB.Servers.InsertOnSubmit(server); server.serverName = serverNameBox.Text; server.address = serverAddressBox.Text; server.login = loginBox.Text; server.pass = passwordBox.Password; server.sid = output.sid; MDEDB.SubmitChanges(); string url = serverUrl + "/api/account/getdata/" + loginBox.Text + "/" + output.sid; new HttpGetRequest <PersonalDataOutput>(url, personalDataCallback); MessageBox.Show("Logged in on server."); NavigationService.GoBack(); } } else { MessageBox.Show("Unable to login on server:\n" + output.reason); } }); }
private string login() { BasicInput LoginInputObj = new BasicInput(); LoginOutput LoginOutputObj = new LoginOutput(); Security secObj = new Security(); LoginInputObj.agentMsIsdn = AppConfiguration.VinaPhoneAgentMsIsdl; //LoginInputObj.password = secObj.GetSHA1Hash(secObj.Epay_Decrypt(Password, PasswordKey)); LoginInputObj.password = secObj.GetSHA1Hash(AppConfiguration.VinaPhonePassword); //fEqNCco3Yq9h5ZUglD3CZJT4lBs= LoginInputObj.username = AppConfiguration.VinaPhoneUserName; try { LoginOutputObj = eloadObj.login(LoginInputObj); if (LoginOutputObj.status == "0") { transObj.WriteLog("Login Vinaphone successful, sessionid=" + LoginOutputObj.sessionid); } else { transObj.WriteLog("Login Vinaphone fail, status=" + LoginOutputObj.status + ", message=" + LoginOutputObj.message); } //Console.WriteLine("login() result:"); //Console.WriteLine("status=" + LoginOutputObj.status + ", message=" + LoginOutputObj.message); } catch (Exception ex) { transObj.WriteLog("Login Vinaphone fail, exception=" + ex.ToString()); return(""); } //if successfull if (LoginOutputObj.status == "0") { return(LoginOutputObj.sessionid); } else { return(""); } }
public async Task <LoginOutput> Login(LoginInput input) { var user = await _userRepository.FindUserByUserName(input.LoginName); if (user == null) { user = await _userRepository.FindUserByPhoneNumber(input.LoginName); } if (user == null) { user = await _userRepository.FindUserByEmail(input.LoginName); } if (user == null) { throw new BusinessException("登录失败,用户不存在或密码错误!"); } var verifyPasswordHash = new PasswordHasher <User>(); var verifyResult = verifyPasswordHash.VerifyHashedPassword(user, user.Password, input.Password); if (verifyResult == PasswordVerificationResult.Failed) { throw new BusinessException("登录失败,用户不存在或密码错误!"); } var loginResult = new LoginOutput { IsSuccess = verifyResult != PasswordVerificationResult.Failed, UserName = user.UserName, Claims = new List <Claim> { new Claim(ClaimTypes.Name, user.UserName), new Claim(ClaimTypes.Email, user.Email), new Claim(ClaimTypes.MobilePhone, user.PhoneNumber) } }; return(loginResult); }
private bool Login() { LoginInput input = new LoginInput(); input.os = (int)GlobalVariable.OSType.PC; input.osStr = ""; input.version = GlobalVariable.Version; input.loginName = cmb_id.Text; input.password = txt_pwd.PasswordStr; input.manufacture = ""; output = new LoginOutput(); string errMsg = string.Empty; if (!HttpService.Instance.Login(input, ref output, ref errMsg)) { MessageBoxWindow.Show("登录失败:" + errMsg, this); return(false); } return(true); }
public static LoginOutput Login(string username, string password) { logger.Info($"Login request for user {username}"); LoginOutput output = new LoginOutput() { Result = LoginResult.Success, User = storage.Login(username, password) }; if (output.User == null) { output.Result = LoginResult.Failed; } else { List <Entities.Domain> domains = storage.GetDomains(output.User.Username); if (domains != null && domains.Count > 0 && output.User.DomainId != Guid.Empty) { output.User.Domain = domains.Where(x => x.Id == output.User.DomainId).FirstOrDefault(); } int passwordDays = (int)DateTime.Now.Subtract(DateTimeHelper.GetFromUnixTimestamp(output.User.PasswordChanged)).TotalDays; if (passwordDays >= Settings.GetInt("PasswordLifetimeInDays")) { output.Result = LoginResult.PasswordExpired; } else { output.User.Properties = storage.LoadProperties(output.User); } } string json = JsonHelper.Serialize(output); logger.Info(json); return(output); }
/// <summary> /// 用户登录 /// </summary> /// <param name="password">用户的密码</param> /// <param name="output"></param> public void UserLogin(string password, LoginOutput output) { Ensure.NotNull(output, nameof(output)); if (!ValidPassword(password)) { output.LoginResult = LoginResult.InvalidPassword; return; } if (!IsActive) { output.LoginResult = LoginResult.UserIsNotActive; return; } LastLoginTime = DateTime.Now; LoginCount++; output.LoginResult = LoginResult.Success; output.UserAccount = UserAccount; output.UserName = UserName; }
public LoginOutput Login(LoginInput input) { string passwordMd5 = Encrypt.MD5ByHash(input.Password); var user = _userRepository.FirstOrDefault(t => t.UserName == input.UserName && t.Password == passwordMd5 && t.IsDeleted == false); LoginOutput output = new LoginOutput(); if (user == null) { return(output); } output = user.MapTo <LoginOutput>(); if (output.RoleId.HasValue) { output.Role = _roleRepository.Get((Guid)output.RoleId)?.RoleName; } user.LastLoginTime = Clock.Now; _userRepository.UpdateAsync(user); return(output); }
public async Task <IActionResult> LoginUser([FromBody] LoginModel model) { LoginOutput loginOutput = new LoginOutput(); if (ModelState.IsValid) { Login userLogin = new Login(_signInManager, _userManager, _configuration); loginOutput = await userLogin.UserLogin(model); return(Ok(loginOutput)); } else { loginOutput.ErrorCode = LoginOutput.ErrorCodes.NullRequest; loginOutput.ErrorDescription = "Model is not valid"; loginOutput.Token = null; return(BadRequest(loginOutput)); } }