impersonateUser method

Future<ImpersonateUserResponse<T>> impersonateUser({
  1. required String userId,
})

Impersonate a user

userId The ID of the user to impersonate

Implementation

Future<ImpersonateUserResponse<T>> impersonateUser({
  required String userId,
}) async {
  try {
    final response = await super.dio.post(
      "/admin/impersonate-user",
      data: {
        "userId": userId,
      },
      options: await super.getOptions(isTokenRequired: true),
    );
    final impersonateUserResponse = ImpersonateUserResponse<T>.fromJson(response.data, super.fromJsonUser);
    final adminToken = await super.tokenStore.getToken(); // Get the existing "admin" user token
    assert(adminToken.isNotEmpty, "Admin token is empty");
    await super.tokenStore.saveAdminToken(adminToken); // Save the "admin" user token
    await super.tokenStore.saveToken(
      impersonateUserResponse.session.token,
    ); // Replace the "admin" user token with the impersonated user token
    return impersonateUserResponse;
  } catch (e) {
    final message = getErrorMessage(e);
    if (message == null) rethrow;
    throw message;
  }
}