authenticate method
Future<FacebookAuthSuccess>
authenticate(
- Session session, {
- required String accessToken,
- required Transaction? transaction,
Authenticates a user using a Facebook access token.
This method verifies the token with Facebook's Debug Token API and fetches
the user's profile information. If the Facebook user ID is not yet known
in the system, a new AuthUser is created.
Implementation
Future<FacebookAuthSuccess> authenticate(
final Session session, {
required final String accessToken,
required final Transaction? transaction,
}) async {
final accountDetails = await fetchAccountDetails(
session,
accessToken: accessToken,
);
var facebookAccount = await FacebookAccount.db.findFirstRow(
session,
where: (final t) => t.userIdentifier.equals(
accountDetails.userIdentifier,
),
transaction: transaction,
);
final createNewUser = facebookAccount == null;
final AuthUserModel authUser = switch (createNewUser) {
true => await _authUsers.create(
session,
transaction: transaction,
),
false => await _authUsers.get(
session,
authUserId: facebookAccount!.authUserId,
transaction: transaction,
),
};
if (createNewUser) {
facebookAccount = await linkFacebookAuthentication(
session,
authUserId: authUser.id,
accountDetails: accountDetails,
transaction: transaction,
);
}
return (
facebookAccountId: facebookAccount.id!,
authUserId: facebookAccount.authUserId,
details: accountDetails,
newAccount: createNewUser,
scopes: authUser.scopes,
);
}