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 : ""
            }));
        }
示例#2
0
        public async Task <JsonResult> Submit(UserLoginInput input)
        {
            var operateStatus = new OperateStatus();

            try
            {
                //获取生成验证码的结果值
                var verifyCode = VerifyCodeUtil.GetVerifyCode();
                //判断录入验证码和生成的验证码值是否相等
                if (input.Verify != verifyCode)
                {
                    operateStatus.ResultSign = ResultSign.Error;
                    operateStatus.Message    = "验证码错误";
                    return(Json(operateStatus));
                }
                //验证数据库信息
                var info = await _userInfoLogic.CheckUserByCodeAndPwd(input);

                if (info.Data != null)
                {
                    var principalUser = new PrincipalUser
                    {
                        UserId           = info.Data.UserId,
                        Code             = info.Data.Code,
                        Name             = info.Data.Name,
                        OrganizationId   = info.Data.OrganizationId,
                        OrganizationName = info.Data.OrganizationName
                    };
                    principalUser.LoginId = Guid.NewGuid();
                    //写入Cookie信息
                    FormAuthenticationExtension.SetAuthCookie(principalUser.UserId.ToString(), principalUser, input.Remberme);
                    //是否具有返回路径
                    if (Url.IsLocalUrl(input.ReturnUrl) && input.ReturnUrl.Length > 1 && input.ReturnUrl.StartsWith("/") &&
                        !input.ReturnUrl.StartsWith("//") && !input.ReturnUrl.StartsWith("/\\"))
                    {
                        info.ResultSign = ResultSign.Successful;
                        info.Message    = input.ReturnUrl;
                    }
                    //写入日志
                    WriteLoginLog(principalUser.LoginId);
                }
                return(Json(info));
            }
            catch (Exception ex)
            {
                operateStatus.Message = ex.Message;
                return(Json(operateStatus));
            }
        }