Ejemplo n.º 1
0
        public async Task <(OperationResponse item, Claim[] cliams)> ChangePassword(ChangePassInputDto dto)
        {
            dto.NotNull(nameof(dto));
            var userId = _principal.Identity?.GetUesrId <string>();
            var user   = await _userManager.FindByIdAsync(userId);

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

            if (!signInResult.Succeeded)
            {
                return(OperationResponse.Error("密码不正确!!"), new Claim[] { });
            }

            var result = await _userManager.ChangePasswordAsync(user, dto.OldPassword, dto.NewPassword);

            if (!result.Succeeded)
            {
                return(result.ToOperationResponse(), new Claim[] { });
            }

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

            return(new OperationResponse("修改密码成功!!", new
            {
                AccessToken = jwtToken.AccessToken,
                NickName = user.NickName,
                UserId = user.Id.ToString(),
                AccessExpires = jwtToken.AccessExpires
            }, OperationResponseType.Success), jwtToken.claims);
        }
Ejemplo n.º 2
0
        public async Task <(OperationResponse item, Claim[] cliams)> Login(LoginInputDto input)
        {
            input.NotNull(nameof(input));
            var user = await _userManager.FindByNameAsync(input.UserName);

            if (user == null)
            {
                return(new OperationResponse(ResultMessage.UserNameNotFind, OperationEnumType.Error), new Claim[] { });
            }
            var result = await _userManager.CheckPasswordAsync(user, input.Password);

            if (!result)
            {
                return(new OperationResponse(ResultMessage.PassWordNotCheck, OperationEnumType.Error), new Claim[] { });
            }
            var jwtToken = _jwtBearerService.CreateToken(user.Id, user.UserName);

            return(new OperationResponse(ResultMessage.LoginSusscess, new
            {
                AccessToken = jwtToken.AccessToken,
                NickName = user.NickName,
                UserId = user.Id.ToString(),
                AccessExpires = jwtToken.AccessExpires
            }, OperationEnumType.Error), new Claim[] { });
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
0
        private async Task <JsonWebToken> CreateJwtToken(User user, RequestClientType clientType = RequestClientType.Browser)
        {
            IServiceProvider  provider         = HttpContext.RequestServices;
            IJwtBearerService jwtBearerService = provider.GetService <IJwtBearerService>();
            JsonWebToken      token            = await jwtBearerService.CreateToken(user.Id.ToString(), user.UserName, clientType);

            return(token);
        }
Ejemplo n.º 5
0
        private async Task <JwtTokenResponse> GenerateAndSaveTokenAsync(Client client)
        {
            var tokenResult = _jwtBearer.CreateToken(client);

            client.RefreshToken = tokenResult.RefreshToken;
            client.Token        = tokenResult.Token;

            _repository.Update(client);

            return(await _repository.SaveAsync() <= 0 ? null : tokenResult);
        }
Ejemplo n.º 6
0
        public async Task LoginAsync_ShouldReturnJwtTokenResponse_WhenInputIsValid()
        {
            // Arrange
            var clientToLogin = new ClientLoginRequest
            {
                Login    = "******",
                Password = "******"
            };
            var client   = new Client();
            var jwtToken = new JwtTokenResponse {
                Token = "token", RefreshToken = "refreshToken"
            };

            _clientRepository.FindByLoginAsync(Arg.Any <string>()).Returns(client);
            _passwordHasher.Validate(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <string>()).Returns(true);
            _jwtBearer.CreateToken(client).Returns(jwtToken);
            _clientRepository.SaveAsync().Returns(1);
            // Act
            var token = await _sut.LoginAsync(clientToLogin);

            // Assert
            token.Should().NotBeNull();
            token.Should().Be(jwtToken);
        }