authenticate method
Future<FirebaseAuthSuccess>
authenticate(
- Session session, {
- required String idToken,
- required Transaction? transaction,
Authenticates a user using an ID token.
If the external user ID is not yet known in the system, a new AuthUser
is created for it.
Implementation
Future<FirebaseAuthSuccess> authenticate(
final Session session, {
required final String idToken,
required final Transaction? transaction,
}) async {
final accountDetails = await fetchAccountDetails(
session,
idToken: idToken,
);
var firebaseAccount = await FirebaseAccount.db.findFirstRow(
session,
where: (final t) => t.userIdentifier.equals(
accountDetails.userIdentifier,
),
transaction: transaction,
);
final createNewUser = firebaseAccount == null;
final AuthUserModel authUser = switch (createNewUser) {
true => await _authUsers.create(
session,
transaction: transaction,
),
false => await _authUsers.get(
session,
authUserId: firebaseAccount!.authUserId,
transaction: transaction,
),
};
if (createNewUser) {
firebaseAccount = await linkFirebaseAuthentication(
session,
authUserId: authUser.id,
accountDetails: accountDetails,
transaction: transaction,
);
}
return (
firebaseAccountId: firebaseAccount.id!,
authUserId: firebaseAccount.authUserId,
details: accountDetails,
newAccount: createNewUser,
scopes: authUser.scopes,
);
}