public async Task <JsonResult> Login(SystemUserLoginInput input) { var operateStatus = new OperateStatus(); string tokenData = String.Empty; //验证数据库信息 var info = await _userInfoLogic.CheckUserByCodeAndPwd(input); if (info.Data != null) { ICollection <string> roles = new List <string>(); if (info.Data.IsAdmin) { //查询顶级组织机构 var orgs = (await _organizationLogic.GetSystemOrganizationByPid(new IdInput(Guid.Empty))).FirstOrDefault(); if (orgs != null) { info.Data.OrganizationId = Guid.Parse(orgs.id.ToString()); info.Data.OrganizationName = orgs.text; } roles.Add("Admin"); } var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtConfig.Value.Secret)); var header = new JwtHeader(new SigningCredentials(key, SecurityAlgorithms.HmacSha256)); var issuer = _jwtConfig.Value.Issuer; var loginTime = DateTime.Now; var claims = new[] { new Claim("Name", info.Data.Name), new Claim("Code", info.Data.Code), new Claim("OrganizationId", info.Data.OrganizationId == Guid.Empty?"":info.Data.OrganizationId.ToString()), new Claim("OrganizationName", info.Data.OrganizationName ?? ""), new Claim("LoginId", info.Data.LoginId.ToString()), new Claim(JwtRegisteredClaimNames.Jti, info.Data.UserId.ToString()) }.Concat(roles.Select(role => new Claim("role", role))); JwtPayload payload = input.Remberme ? new JwtPayload(issuer, null, claims, null, loginTime.AddYears(1)) : new JwtPayload(issuer, null, claims, null, loginTime.AddMinutes(60)); var token = new JwtSecurityToken(header, payload); operateStatus.ResultSign = ResultSign.Successful; tokenData = new JwtSecurityTokenHandler().WriteToken(token); WriteLoginLog(info.Data); } else { operateStatus.ResultSign = ResultSign.Error; operateStatus.Message = info.Message; } return(Json(new { operateStatus.ResultSign, operateStatus.Message, Data = tokenData, OrganizationId = info.Data?.OrganizationId ?? Guid.Empty, UserName = info.Data != null ? info.Data.Name : "", OrganizationName = info.Data != null ? info.Data.OrganizationName : "", Code = info.Data != null ? info.Data.Code : "", HeadImage = info.Data != null ? info.Data.HeadImage : "" })); }
/// <summary> /// 根据用户名和密码查询用户信息 /// 1:用户登录使用 /// </summary> /// <param name="input">登录名、密码等</param> /// <returns></returns> public Task <SystemUserLoginOutput> CheckUserByCodeAndPwd(SystemUserLoginInput input) { var sql = new StringBuilder(); sql.Append(@"SELECT UserId,userInfo.Code,userInfo.HeadImage,userInfo.IsAdmin,userInfo.Name,FirstVisitTime,userInfo.IsFreeze,userInfo.Status,org.Name OrganizationName,org.OrganizationId FROM [System_UserInfo] userInfo LEFT JOIN System_PermissionUser perUser on userInfo.UserId=perUser.PrivilegeMasterUserId and perUser.PrivilegeMaster=1 LEFT JOIN System_Organization org on perUser.PrivilegeMasterValue=org.OrganizationId "); sql.Append("WHERE userInfo.Code=@code AND userInfo.Password=@pwd"); return(SqlMapperUtil.SqlWithParamsSingle <SystemUserLoginOutput>(sql.ToString(), new { code = input.Code, pwd = input.Pwd })); }
/// <summary> /// 根据登录代码和密码查询用户信息 /// </summary> /// <param name="input">登录名、密码等</param> /// <returns></returns> public async Task <OperateStatus <SystemUserLoginOutput> > CheckUserByCodeAndPwd(SystemUserLoginInput input) { var operateStatus = new OperateStatus <SystemUserLoginOutput>(); //将传入的密码加密 var encryptPwd = DEncryptUtil.Encrypt(input.Pwd, _configOptions.Value.PasswordKey); //查询信息 input.Pwd = encryptPwd; var data = await _userInfoRepository.CheckUserByCodeAndPwd(input); //是否存在 if (data == null) { operateStatus.ResultSign = ResultSign.Error; operateStatus.Message = ResourceSystem.用户名或密码错误; return(operateStatus); } //是否冻结 if (data.IsFreeze) { operateStatus.ResultSign = ResultSign.Error; operateStatus.Message = ResourceSystem.登录用户已冻结; return(operateStatus); } //成功 operateStatus.ResultSign = ResultSign.Successful; operateStatus.Message = "/"; if (data.FirstVisitTime == null) { //更新用户最后一次登录时间 _userInfoRepository.UpdateFirstVisitTime(new IdInput(data.UserId)); } //更新用户最后一次登录时间 _userInfoRepository.UpdateLastLoginTime(new IdInput(data.UserId)); data.LoginId = CombUtil.NewComb(); operateStatus.Data = data; return(operateStatus); }