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.")))); }
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);