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(
Session session, {
required String accessToken,
required Transaction? transaction,
}) async {
final accountDetails = await fetchAccountDetails(
session,
accessToken: accessToken,
);
var facebookAccount = await FacebookAccount.db.findFirstRow(
session,
where: (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,
);
await config.onAfterFacebookAccountCreated?.call(
session,
authUser,
facebookAccount,
transaction: transaction,
);
}
return (
facebookAccountId: facebookAccount.id!,
authUserId: facebookAccount.authUserId,
details: accountDetails,
newAccount: createNewUser,
scopes: authUser.scopes,
);
}