login method

Future<AuthSuccess> login(
  1. Session session, {
  2. required String email,
  3. required String password,
  4. Transaction? transaction,
})

Logs in the user and returns a new session.

Throws an EmailAccountLoginException in case of errors, with reason:

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,
          );
        }),
  );
}