signInWithServerCredential method

Future<String?> signInWithServerCredential(
  1. BuildContext context, {
  2. required AuthenticatedUser user,
  3. required String idToken,
  4. required SignInWithServerAPIAction signInAPI,
})

After authenticated the user, redirect to a Server API with the idToken to retrieve Server-specific credentials (bearer, cookies,..). Once completed we sign the user in, and save the credentials to ${auth.user.data}

Implementation

Future<String?> signInWithServerCredential(BuildContext context,
    {required AuthenticatedUser user,
    required String idToken,
    required SignInWithServerAPIAction signInAPI}) async {
  Response? response = await InvokeAPIController().executeWithContext(
      context, signInAPI,
      additionalInputs: {'idToken': idToken, 'user': user});
  if (response != null) {
    // eval the server credentials and save to user object
    if (signInAPI.signInCredentials != null) {
      ScopeManager? scopeManager =
          ScreenController().getScopeManager(context);
      if (scopeManager != null) {
        ScopeManager tempScope =
            scopeManager.createChildScope(ephemeral: true);
        tempScope.dataContext
            .addDataContextById('response', APIResponse(response: response));

        Map credentials = {};
        signInAPI.signInCredentials!.forEach((key, value) {
          credentials[key] = tempScope.dataContext.eval(value);
        });
        user.setServerCredentials(credentials);
      }
    }
    return await _signInLocally(context, user: user);
  }
  return null;
}