예제 #1
0
        public async Task <IActionResult> LoginWithCard(string deviceCode, string cardNo)
        {
            var result = new ResultEntity();
            var card   = await _cardAppService.GetCardByNo(cardNo);

            if (card == null)
            {
                result.Message = "无效证卡";
            }
            else
            {
                if (!card.Enabled)
                {
                    result.Message = "该卡片尚未启用,无法登录";
                }
                else
                {
                    var user = await _userAppService.GetForEditByIdAsync(card.UserId);

                    var usbKeyNo = Request.Cookies["KOAL_CERT_CN"]?.Trim();
                    usbKeyNo = usbKeyNo ?? "";
                    var loginResult = await _accountAppService.LoginAsync(user.UserName, user.Password, usbKeyNo);

                    switch (loginResult.Result)
                    {
                    case EnumLoginResult.登录成功:
                    case EnumLoginResult.强制修改密码:
                        var client = await _clientAppService.GetClient(deviceCode);

                        if (client != null)
                        {
                            result.Data = client.HomePage;
                        }
                        await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, loginResult.ClaimsPrincipal, new AuthenticationProperties
                        {
                            ExpiresUtc = DateTimeOffset.Now.AddMinutes(_accountSettings.Value.ExpiryTime)
                        });

                        result.Success = true;
                        result.Data    = string.IsNullOrEmpty(result.Data) ? "/Home/Index" : result.Data;
                        break;

                    default:
                        result.Message = result.Message;
                        break;
                    }
                }
            }
            return(Json(result));
        }