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
            }));
        }
Exemple #3
0
        /// <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);
        }