login method
Logs in the user and returns a new session.
Throws an EmailAccountLoginException in case of errors, with reason:
- EmailAccountLoginExceptionReason.invalidCredentials if the email or password is incorrect.
- EmailAccountLoginExceptionReason.tooManyAttempts if there have been too many failed login attempts.
Throws an AuthUserBlockedException if the auth user is blocked.
Implementation
Future<AuthSuccess> login(
final Session session, {
required final String email,
required final String password,
final Transaction? transaction,
}) async {
return DatabaseUtil.runInTransactionOrSavepoint(
session.db,
transaction,
(final transaction) =>
EmailIdpUtils.withReplacedServerEmailException(() async {
final authUserId = await utils.authentication.authenticate(
session,
email: email,
password: password,
transaction: transaction,
);
final authUser = await _authUsers.get(
session,
authUserId: authUserId,
transaction: transaction,
);
return _tokenManager.issueToken(
session,
authUserId: authUserId,
method: method,
scopes: authUser.scopes,
transaction: transaction,
);
}),
);
}