login static method
Implementation
static Future<Map<String, dynamic>> login(
String email, String password) async {
final qb = QueryBuilder(table: _config.table);
final user =
await qb.where(_config.emailColumn, '=', email).limit(1).first();
if (user == null) {
throw AuthException('Invalid email or password');
}
final hashedPassword = user[_config.passwordColumn] as String;
final isMatch = Hashing().verify(password, hashedPassword);
if (!isMatch) {
throw AuthException('Invalid email or password');
}
if (_config.requireEmailVerification && user['email_verified_at'] == null) {
throw AuthException('Email verification required.');
}
final cleanUser = _sanitizeUserData(user);
// ✅ Create JWT token with expiry
final jwt = JWT({
'id': cleanUser['id'],
'email': cleanUser[_config.emailColumn],
});
final token = jwt.sign(
SecretKey(_config.jwtSecret!),
expiresIn: Duration(hours: _config.jwtExpiryHours),
);
return {
'user': cleanUser,
'token': token,
};
}