login method

Future<AuthResult> login({
  1. required String username,
  2. required String password,
})

Login user

Implementation

Future<AuthResult> login({
  required String username,
  required String password,
}) async {
  try {
    // In a real implementation, this would query the database
    // For now, we'll simulate authentication

    if (username.isEmpty || password.isEmpty) {
      return AuthResult.error('Username and password are required');
    }

    // Simulate user lookup (in real app, this would be a database query)
    final userData = await _findUserByUsername(username);

    if (userData == null) {
      return AuthResult.error('Invalid credentials');
    }

    final storedPassword = userData['password'] as String;

    // Verify password
    if (!Password.verify(password, storedPassword)) {
      return AuthResult.error('Invalid credentials');
    }

    // Create session
    final session = Session.create(
      userData['id'] as String,
      sessionDuration,
    );

    // Create JWT token
    final jwt = JWT.create(
      {
        'id': userData['id'],
        'username': userData['username'],
        'email': userData['email'],
      },
      secret: jwtSecret,
      expiresIn: jwtDuration,
    );

    return AuthResult.success(
      message: 'Login successful',
      user: userData,
      session: session,
      token: jwt.token,
    );
  } catch (e) {
    return AuthResult.error('Login failed: ${e.toString()}');
  }
}