public async Task <Option <JwtModel, Error> > Login(LoginUserModel model)
        {
            var loginResult = await(await UserManager.FindByEmailAsync(model.Email))
                              .SomeNotNull()
                              .FilterAsync(async user => await UserManager.CheckPasswordAsync(user, model.Password));

            return(loginResult.Match(
                       user =>
            {
                return new JwtModel
                {
                    TokenString = JwtFactory.GenerateEncodedToken(user.Id, user.Email, new List <Claim>())
                }.Some <JwtModel, Error>();
            },
                       () => Option.None <JwtModel, Error>(new Error("Invalid credentials."))));
        }
Exemple #2
0
        public async Task Login_Should_Return_Jwt(LoginUserModel model, User expectedUser, string expectedJwt)
        {
            // Arrange
            MockFindByEmail(model.Email, expectedUser);

            MockCheckPassword(expectedUser, model.Password, true);

            _jwtFactoryMock.Setup(jwtFactory => jwtFactory
                                  .GenerateEncodedToken(expectedUser.Id, expectedUser.Email, new List <Claim>()))
            .Returns(expectedJwt);

            // Act
            var result = await _usersService.Login(model);

            // Assert
            result.Exists(jwt => jwt.TokenString == expectedJwt).ShouldBeTrue();
        }
 public async Task <IActionResult> Login([FromBody] LoginUserModel model) =>
 (await _usersService.Login(model))
 .Match(Ok, Error);