public async Task <Optional <User> > Login(string email, string password) { var user = await _userDao.GetUserByEmail(email); if (user.IsEmpty) { return(Optional <User> .Empty()); } string hash = Encoding.UTF8.GetString(user.Value.Password); // check if password match with hash if (_passwordEncoder.Verify(password, hash)) { return(Optional <User> .of(new User { Id = user.Value.Id, Name = user.Value.Name, Email = user.Value.Email })); } return(Optional <User> .Empty()); }