Пример #1
0
        public async Task <(OperationResponse item, Claim[] cliams)> Login(LoginDto loginDto)
        {
            loginDto.NotNull(nameof(loginDto));
            var user = await _userManager.FindByNameAsync(loginDto.UserName);

            if (user == null)
            {
                return(new OperationResponse("此用户不存在!!", OperationResponseType.Error), new Claim[] { });
            }
            var signInResult = await _signInManager.CheckPasswordSignInAsync(user, loginDto.Password, true);

            if (!signInResult.Succeeded)
            {
                if (signInResult.IsLockedOut)
                {
                    return(new OperationResponse($"用户因密码错误次数过多而被锁定 {_userManager.Options.Lockout.DefaultLockoutTimeSpan.TotalMinutes} 分钟,请稍后重试", OperationResponseType.Error), new Claim[] { });
                }
                if (signInResult.IsNotAllowed)
                {
                    return(new OperationResponse("不允许登录。", OperationResponseType.Error), new Claim[] { });
                }
                return(new OperationResponse("登录失败,用户名或账号无效。", OperationResponseType.Error), new Claim[] { });
            }

            var jwtToken = _jwtBearerService.CreateToken(user.Id, user.UserName);

            //await _bus.PublishAsync(new IdentityEvent() { UserName = loginDto.UserName });
            return(new OperationResponse("登录成功", new
            {
                AccessToken = jwtToken.AccessToken,
                NickName = user.NickName,
                UserId = user.Id.ToString(),
                AccessExpires = jwtToken.AccessExpires
            }, OperationResponseType.Success), jwtToken.claims);
        }