Пример #1
0
        public IActionResult CheckLogin([FromBody] LoginParam param)
        {
            try
            {
                string username     = param.Username ?? throwStringAssert("用户名不能为空");
                string password     = param.Password ?? throwStringAssert("密码不能为空");
                string code         = param.Code ?? throwStringAssert("验证码不能为空");
                var    vcodeSession = Request.Cookies["vcode-session"];
                if (string.IsNullOrEmpty(vcodeSession))
                {
                    return(Json(new { success = false, message = "验证码已失效" }));
                }

                var state = verifyCodeService.VerifyCode(vcodeSession, code);
                switch (state)
                {
                case VerifyCodeService.State.WrongCode: return(Json(new { success = false, message = "验证码错误" }));

                case VerifyCodeService.State.Expired: return(Json(new { success = false, message = "验证码已过期" }));

                case VerifyCodeService.State.Invalid: return(Json(new { success = false, message = "验证信息错误" }));
                }

                UserEntity userEntity = userService.CheckPassword(username, password);

                var orgs  = userOrganizeService.IQueryable().Where(it => it.User.Id == userEntity.Id).ToList();
                var roles = roleService
                            .IQueryable().ToList();

                var myroles = roles
                              .Where(it => orgs.Any(org =>
                                                    it.OrganizeCategoryId == org.Organize.CategoryId && it.OrganizeDutyLevel == org.DutyLevel))
                              .ToList();

                var permissions = new HashSet <string>();
                foreach (var roleEntity in myroles)
                {
                    var menus = roleEntity.AvailableMenus.Split(",", StringSplitOptions.RemoveEmptyEntries);
                    foreach (var menu in menus)
                    {
                        permissions.Add(menu);
                    }
                }

                logger.WriteDbLog(DbLogType.Login.ToString(), true, "登录成功");

                return(Json(new
                            { success = true, data = LoginExtension.CreateJwtToken(userEntity, permissions.ToArray()) }));
            }
            catch (Exception ex)
            {
                var msg = "登录失败," + ex.Message;
                logger.WriteDbLog(DbLogType.Login.ToString(), false, msg);

                return(Json(new { success = false, message = msg }));
            }
        }