Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions packages/clerk_flutter/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,5 @@ build/
# Flutter auto-generated files
.flutter-plugins
.flutter-plugins-dependencies

.env.*
6 changes: 6 additions & 0 deletions packages/clerk_flutter/example/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ PODS:
- GTMSessionFetcher/Core
- image_picker_ios (0.0.1):
- Flutter
- integration_test (0.0.1):
- Flutter
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
Expand All @@ -55,6 +57,7 @@ DEPENDENCIES:
- Flutter (from `Flutter`)
- google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/darwin`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- integration_test (from `.symlinks/plugins/integration_test/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
Expand All @@ -78,6 +81,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/google_sign_in_ios/darwin"
image_picker_ios:
:path: ".symlinks/plugins/image_picker_ios/ios"
integration_test:
:path: ".symlinks/plugins/integration_test/ios"
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
url_launcher_ios:
Expand All @@ -96,6 +101,7 @@ SPEC CHECKSUMS:
GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238
GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6
image_picker_ios: 85f2b3c9fb98c09d63725c4d12ebd585b56ec35d
integration_test: 4a889634ef21a45d28d50d622cf412dc6d9f586e
path_provider_foundation: 608fcb11be570ce83519b076ab6a1fffe2474f05
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
url_launcher_ios: 9d5365b30ff416ba8e3d917bae5f7fb25f6a4a89
Expand Down
70 changes: 35 additions & 35 deletions packages/clerk_flutter/example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,55 +27,55 @@ Future<void> main() async {
}

runApp(
const ExampleApp(
publishableKey: publishableKey,
ExampleApp(
config: ClerkAuthConfig(
publishableKey: publishableKey,
redirectionGenerator: generateDeepLink,
deepLinkStream: AppLinks().allUriLinkStream.map(createClerkLink),
),
),
);
}

/// Example App
class ExampleApp extends StatelessWidget {
/// Constructs an instance of Example App
const ExampleApp({super.key, required this.publishableKey});
/// This function maps a [Uri] into a [ClerkDeepLink], which is essentially
/// just a container for the [Uri]. The [ClerkDeepLink] can also
/// contain a [clerk.Strategy], to use in preference to a strategy
/// inferred from the [Uri]
ClerkDeepLink? createClerkLink(Uri uri) {
if (uri.pathSegments.first == 'auth') {
return ClerkDeepLink(uri: uri);
}

/// Publishable Key
final String publishableKey;
// If the host app deems the deep link to be not relevant to the Clerk SDK,
// we return [null] instead of a [ClerkDeepLink] to inhibit its processing.
return null;
}

/// This function maps a [Uri] into a [ClerkDeepLink], which is essentially
/// just a container for the [Uri]. The [ClerkDeepLink] can also
/// contain a [clerk.Strategy], to use in preference to a strategy
/// inferred from the [Uri]
ClerkDeepLink? createClerkLink(Uri uri) {
if (uri.pathSegments.first == 'auth') {
return ClerkDeepLink(uri: uri);
}
/// A function that returns an appropriate deep link [Uri] for the oauth
/// redirect for a given [clerk.Strategy], or [null] if redirection should
/// be handled in-app
Uri? generateDeepLink(BuildContext context, clerk.Strategy strategy) {
return Uri.parse('clerk://example.com/auth/$strategy');

// If the host app deems the deep link to be not relevant to the Clerk SDK,
// we return [null] instead of a [ClerkDeepLink] to inhibit its processing.
return null;
}
// if you want to use the default in-app SSO, just remove the
// [redirectionGenerator] parameter from the [ClerkAuthConfig] object
// below, or...

/// A function that returns an appropriate deep link [Uri] for the oauth
/// redirect for a given [clerk.Strategy], or [null] if redirection should
/// be handled in-app
Uri? generateDeepLink(BuildContext context, clerk.Strategy strategy) {
return Uri.parse('clerk://example.com/auth/$strategy');
// return null;
}

// if you want to use the default in-app SSO, just remove the
// [redirectionGenerator] parameter from the [ClerkAuthConfig] object
// below, or...
/// Example App
class ExampleApp extends StatelessWidget {
/// Constructs an instance of Example App
const ExampleApp({super.key, required this.config});

// return null;
}
/// Publishable Key
final ClerkAuthConfig config;

@override
Widget build(BuildContext context) {
return ClerkAuth(
config: ClerkAuthConfig(
publishableKey: publishableKey,
redirectionGenerator: generateDeepLink,
deepLinkStream: AppLinks().allUriLinkStream.map(createClerkLink),
),
config: config,
child: MaterialApp(
theme: ThemeData.light(),
debugShowCheckedModeBanner: false,
Expand Down
5 changes: 5 additions & 0 deletions packages/clerk_flutter/example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ dev_dependencies:
flutter_lints: ^3.0.1
flutter_test:
sdk: flutter
dart_dotenv: ^1.0.1
test: ^1.25.5
http: ^1.1.0
integration_test:
sdk: flutter

flutter:
uses-material-design: true
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"key":"POST /v1/client","body":"{\"response\":{\"object\":\"client\",\"id\":\"CLIENT_ID\",\"sessions\":[],\"sign_in\":null,\"sign_up\":null,\"last_active_session_id\":null,\"last_authentication_strategy\":null,\"cookie_expires_at\":null,\"captcha_bypass\":false,\"created_at\":\"%%DATETIME -2%%\",\"updated_at\":\"%%DATETIME -1%%\"},\"client\":null}"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"key":"GET /v1/environment","body":"{\"auth_config\":{\"object\":\"auth_config\",\"id\":\"AUTH_CONFIG_ID\",\"first_name\":\"%%FIRSTNAME%%\",\"last_name\":\"%%LASTNAME%%\",\"email_address\":\"%%EMAIL%%\",\"phone_number\":\"on\",\"username\":\"on\",\"password\":\"required\",\"identification_requirements\":[[\"email_address\",\"oauth_apple\",\"oauth_facebook\",\"oauth_github\",\"oauth_google\",\"oauth_linkedin_oidc\",\"oauth_token_apple\",\"phone_number\"],[\"username\"]],\"identification_strategies\":[\"email_address\",\"oauth_apple\",\"oauth_facebook\",\"oauth_github\",\"oauth_google\",\"oauth_linkedin_oidc\",\"passkey\",\"password\",\"phone_number\",\"username\"],\"first_factors\":[\"email_code\",\"email_link\",\"enterprise_sso\",\"google_one_tap\",\"oauth_apple\",\"oauth_facebook\",\"oauth_github\",\"oauth_google\",\"oauth_linkedin_oidc\",\"oauth_token_apple\",\"passkey\",\"password\",\"phone_code\",\"reset_password_email_code\",\"reset_password_phone_code\",\"saml\",\"ticket\"],\"second_factors\":[\"phone_code\",\"totp\"],\"email_address_verification_strategies\":[\"email_code\",\"email_link\"],\"single_session_mode\":false,\"enhanced_email_deliverability\":false,\"test_mode\":true,\"cookieless_dev\":true,\"url_based_session_syncing\":true,\"claimed_at\":null,\"reverification\":false},\"display_config\":{\"object\":\"display_config\",\"id\":\"DISPLAY_CONFIG_ID\",\"instance_environment_type\":\"development\",\"application_name\":\"APPLICATION_NAME\",\"theme\":{\"buttons\":{\"font_color\":\"#ffffff\",\"font_family\":\"\\\"Source Sans Pro\\\", sans-serif\",\"font_weight\":\"600\"},\"general\":{\"color\":\"#6c47ff\",\"padding\":\"1em\",\"box_shadow\":\"0 2px 8px rgba(0, 0, 0, 0.2)\",\"font_color\":\"#151515\",\"font_family\":\"\\\"Source Sans Pro\\\", sans-serif\",\"border_radius\":\"0.5em\",\"background_color\":\"#ffffff\",\"label_font_weight\":\"600\"},\"accounts\":{\"background_color\":\"#ffffff\"}},\"preferred_sign_in_strategy\":\"password\",\"logo_image_url\":\"URL\",\"favicon_image_url\":\"\",\"home_url\":\"URL\",\"sign_in_url\":\"URL\",\"sign_up_url\":\"URL\",\"user_profile_url\":\"URL\",\"waitlist_url\":\"URL\",\"after_sign_in_url\":\"URL\",\"after_sign_up_url\":\"URL\",\"after_sign_out_one_url\":\"URL\",\"after_sign_out_all_url\":\"URL\",\"after_switch_session_url\":\"URL\",\"after_join_waitlist_url\":\"URL\",\"organization_profile_url\":\"URL\",\"create_organization_url\":\"URL\",\"after_leave_organization_url\":\"URL\",\"after_create_organization_url\":\"URL\",\"logo_link_url\":\"URL\",\"support_email\":null,\"branded\":true,\"experimental_force_oauth_first\":false,\"clerk_js_version\":\"5\",\"show_devmode_warning\":true,\"google_one_tap_client_id\":\"GOOGLE_ONE_TAP_CLIENT_ID\",\"help_url\":null,\"privacy_policy_url\":\"URL\",\"terms_url\":\"URL\",\"logo_url\":\"URL\",\"favicon_url\":null,\"logo_image\":{\"object\":\"image\",\"id\":\"IMAGE_ID\",\"public_url\":\"URL\"},\"favicon_image\":null,\"captcha_public_key\":null,\"captcha_widget_type\":null,\"captcha_public_key_invisible\":null,\"captcha_provider\":null,\"captcha_oauth_bypass\":[]},\"user_settings\":{\"attributes\":{\"email_address\":{\"enabled\":true,\"required\":true,\"used_for_first_factor\":true,\"first_factors\":[\"email_code\",\"email_link\"],\"used_for_second_factor\":false,\"second_factors\":[],\"verifications\":[\"email_code\",\"email_link\"],\"verify_at_sign_up\":true},\"phone_number\":{\"enabled\":true,\"required\":true,\"used_for_first_factor\":true,\"first_factors\":[\"phone_code\"],\"used_for_second_factor\":true,\"second_factors\":[\"phone_code\"],\"verifications\":[\"phone_code\"],\"verify_at_sign_up\":true},\"username\":{\"enabled\":true,\"required\":false,\"used_for_first_factor\":true,\"first_factors\":[],\"used_for_second_factor\":false,\"second_factors\":[],\"verifications\":[],\"verify_at_sign_up\":false},\"web3_wallet\":{\"enabled\":false,\"required\":false,\"used_for_first_factor\":false,\"first_factors\":[],\"used_for_second_factor\":false,\"second_factors\":[],\"verifications\":[],\"verify_at_sign_up\":false},\"first_name\":{\"enabled\":true,\"required\":true,\"used_for_first_factor\":false,\"first_factors\":[],\"used_for_second_factor\":false,\"second_factors\":[],\"verifications\":[],\"verify_at_sign_up\":false},\"last_name\":{\"enabled\":true,\"required\":true,\"used_for_first_factor\":false,\"first_factors\":[],\"used_for_second_factor\":false,\"second_factors\":[],\"verifications\":[],\"verify_at_sign_up\":false},\"password\":{\"enabled\":true,\"required\":true,\"used_for_first_factor\":true,\"first_factors\":[],\"used_for_second_factor\":false,\"second_factors\":[],\"verifications\":[],\"verify_at_sign_up\":false},\"authenticator_app\":{\"enabled\":true,\"required\":false,\"used_for_first_factor\":false,\"first_factors\":[],\"used_for_second_factor\":true,\"second_factors\":[\"totp\"],\"verifications\":[\"totp\"],\"verify_at_sign_up\":false},\"ticket\":{\"enabled\":true,\"required\":false,\"used_for_first_factor\":false,\"first_factors\":[],\"used_for_second_factor\":false,\"second_factors\":[],\"verifications\":[],\"verify_at_sign_up\":false},\"backup_code\":{\"enabled\":false,\"required\":false,\"used_for_first_factor\":false,\"first_factors\":[],\"used_for_second_factor\":false,\"second_factors\":[],\"verifications\":[],\"verify_at_sign_up\":false},\"passkey\":{\"enabled\":true,\"required\":false,\"used_for_first_factor\":true,\"first_factors\":[\"passkey\"],\"used_for_second_factor\":false,\"second_factors\":[],\"verifications\":[\"passkey\"],\"verify_at_sign_up\":false}},\"sign_in\":{\"second_factor\":{\"required\":false}},\"sign_up\":{\"captcha_enabled\":false,\"captcha_widget_type\":\"smart\",\"custom_action_required\":false,\"progressive\":true,\"mode\":\"public\",\"legal_consent_enabled\":true},\"restrictions\":{\"allowlist\":{\"enabled\":false},\"blocklist\":{\"enabled\":false},\"allowlist_blocklist_disabled_on_sign_in\":{\"enabled\":false},\"block_email_subaddresses\":{\"enabled\":false},\"block_disposable_email_domains\":{\"enabled\":false}},\"username_settings\":{\"min_length\":4,\"max_length\":64,\"allow_extended_special_characters\":false},\"actions\":{\"delete_self\":true,\"create_organization\":true,\"create_organizations_limit\":null},\"attack_protection\":{\"user_lockout\":{\"enabled\":true,\"max_attempts\":100,\"duration_in_minutes\":60},\"pii\":{\"enabled\":true},\"email_link\":{\"require_same_client\":false},\"enumeration_protection\":{\"enabled\":false}},\"passkey_settings\":{\"allow_autofill\":true,\"show_sign_in_button\":true},\"social\":{\"oauth_apple\":{\"enabled\":true,\"required\":false,\"authenticatable\":true,\"block_email_subaddresses\":false,\"strategy\":\"oauth_apple\",\"not_selectable\":false,\"deprecated\":false,\"name\":\"Apple\",\"logo_url\":\"URL\"},\"oauth_custom_spung\":{\"enabled\":false,\"required\":false,\"authenticatable\":true,\"block_email_subaddresses\":false,\"strategy\":\"oauth_custom_spung\",\"not_selectable\":false,\"deprecated\":false,\"name\":\"spung\"},\"oauth_facebook\":{\"enabled\":true,\"required\":false,\"authenticatable\":true,\"block_email_subaddresses\":false,\"strategy\":\"oauth_facebook\",\"not_selectable\":false,\"deprecated\":false,\"name\":\"Facebook\",\"logo_url\":\"URL\"},\"oauth_github\":{\"enabled\":true,\"required\":false,\"authenticatable\":true,\"block_email_subaddresses\":false,\"strategy\":\"oauth_github\",\"not_selectable\":false,\"deprecated\":false,\"name\":\"GitHub\",\"logo_url\":\"URL\"},\"oauth_google\":{\"enabled\":true,\"required\":false,\"authenticatable\":true,\"block_email_subaddresses\":true,\"strategy\":\"oauth_google\",\"not_selectable\":false,\"deprecated\":false,\"name\":\"Google\",\"logo_url\":\"URL\"},\"oauth_linkedin_oidc\":{\"enabled\":true,\"required\":false,\"authenticatable\":true,\"block_email_subaddresses\":false,\"strategy\":\"oauth_linkedin_oidc\",\"not_selectable\":false,\"deprecated\":false,\"name\":\"LinkedIn\",\"logo_url\":\"URL\"}},\"password_settings\":{\"disable_hibp\":false,\"min_length\":8,\"max_length\":0,\"require_special_char\":true,\"require_numbers\":true,\"require_uppercase\":true,\"require_lowercase\":true,\"show_zxcvbn\":false,\"min_zxcvbn_strength\":0,\"enforce_hibp_on_sign_in\":false,\"allowed_special_characters\":\"+$-_\"}},\"commerce_settings\":{\"billing\":{\"enabled\":false,\"has_paid_user_plans\":false,\"has_paid_org_plans\":false,\"free_trial_requires_payment_method\":true,\"user\":{\"enabled\":false,\"has_paid_plans\":false},\"organization\":{\"enabled\":false,\"has_paid_plans\":false}}},\"api_keys_settings\":{\"enabled\":false},\"maintenance_mode\":false,\"client_debug_mode\":false}"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"key":"POST /v1/client/sign_ins identifier","body":"{\"response\":{\"object\":\"sign_in_attempt\",\"id\":\"SIGN_IN_ID\",\"status\":\"needs_first_factor\",\"supported_identifiers\":[\"email_address\",\"passkey\",\"password\",\"phone_number\",\"username\"],\"supported_first_factors\":[{\"strategy\":\"password\"},{\"strategy\":\"phone_code\",\"safe_identifier\":\"%%PHONE%%\",\"phone_number_id\":\"IDENTIFIER_ID\",\"primary\":true},{\"strategy\":\"email_code\",\"safe_identifier\":\"%%EMAIL%%\",\"email_address_id\":\"IDENTIFIER_ID\",\"primary\":true},{\"strategy\":\"email_link\",\"safe_identifier\":\"%%EMAIL%%\",\"email_address_id\":\"IDENTIFIER_ID\",\"primary\":true},{\"strategy\":\"reset_password_email_code\",\"safe_identifier\":\"%%EMAIL%%\",\"email_address_id\":\"IDENTIFIER_ID\",\"primary\":true}],\"supported_second_factors\":null,\"first_factor_verification\":null,\"second_factor_verification\":null,\"identifier\":\"%%EMAIL%%\",\"user_data\":null,\"created_session_id\":null,\"abandon_at\":\"%%DATETIME 1%%\",\"locale\":null},\"client\":{\"object\":\"client\",\"id\":\"CLIENT_ID\",\"sessions\":[],\"sign_in\":{\"object\":\"sign_in_attempt\",\"id\":\"SIGN_IN_ID\",\"status\":\"needs_first_factor\",\"supported_identifiers\":[\"email_address\",\"passkey\",\"password\",\"phone_number\",\"username\"],\"supported_first_factors\":[{\"strategy\":\"password\"},{\"strategy\":\"phone_code\",\"safe_identifier\":\"%%PHONE%%\",\"phone_number_id\":\"IDENTIFIER_ID\",\"primary\":true},{\"strategy\":\"email_code\",\"safe_identifier\":\"%%EMAIL%%\",\"email_address_id\":\"IDENTIFIER_ID\",\"primary\":true},{\"strategy\":\"email_link\",\"safe_identifier\":\"%%EMAIL%%\",\"email_address_id\":\"IDENTIFIER_ID\",\"primary\":true},{\"strategy\":\"reset_password_email_code\",\"safe_identifier\":\"%%EMAIL%%\",\"email_address_id\":\"IDENTIFIER_ID\",\"primary\":true}],\"supported_second_factors\":null,\"first_factor_verification\":null,\"second_factor_verification\":null,\"identifier\":\"%%EMAIL%%\",\"user_data\":null,\"created_session_id\":null,\"abandon_at\":\"%%DATETIME 1%%\",\"locale\":null},\"sign_up\":null,\"last_active_session_id\":null,\"last_authentication_strategy\":null,\"cookie_expires_at\":null,\"captcha_bypass\":false,\"created_at\":\"%%DATETIME -2%%\",\"updated_at\":\"%%DATETIME -1%%\"}}"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"key":"POST /v1/client/sign_ins/SIGN_IN_ID/attempt_first_factor password&strategy=password","body":"{\"response\":{\"object\":\"sign_in_attempt\",\"id\":\"SIGN_IN_ID\",\"status\":\"complete\",\"supported_identifiers\":[\"email_address\",\"passkey\",\"password\",\"phone_number\",\"username\"],\"supported_first_factors\":null,\"supported_second_factors\":null,\"first_factor_verification\":{\"object\":\"verification_password\",\"status\":\"verified\",\"strategy\":\"password\",\"attempts\":1,\"expire_at\":null},\"second_factor_verification\":null,\"identifier\":\"%%EMAIL%%\",\"user_data\":null,\"created_session_id\":\"SESSION_ID\",\"abandon_at\":\"%%DATETIME 1%%\",\"locale\":null},\"client\":{\"object\":\"client\",\"id\":\"CLIENT_ID\",\"sessions\":[{\"object\":\"session\",\"id\":\"SESSION_ID\",\"status\":\"active\",\"expire_at\":\"%%DATETIME 2%%\",\"abandon_at\":\"%%DATETIME 3%%\",\"last_active_at\":\"%%DATETIME -4%%\",\"last_active_organization_id\":null,\"actor\":null,\"user\":{\"id\":\"USER_ID\",\"object\":\"user\",\"username\":\"userfortests\",\"first_name\":\"%%FIRSTNAME%%\",\"last_name\":\"%%LASTNAME%%\",\"locale\":null,\"image_url\":\"URL\",\"has_image\":false,\"primary_email_address_id\":\"IDENTIFIER_ID\",\"primary_phone_number_id\":\"IDENTIFIER_ID\",\"primary_web3_wallet_id\":null,\"password_enabled\":true,\"two_factor_enabled\":false,\"totp_enabled\":false,\"backup_code_enabled\":false,\"email_addresses\":[{\"id\":\"IDENTIFIER_ID\",\"object\":\"email_address\",\"email_address\":\"%%EMAIL%%\",\"reserved\":false,\"verification\":{\"object\":\"verification_admin\",\"status\":\"verified\",\"strategy\":\"admin\",\"attempts\":null,\"expire_at\":null},\"linked_to\":[],\"matches_sso_connection\":false,\"created_at\":\"%%DATETIME -8%%\",\"updated_at\":\"%%DATETIME -8%%\"}],\"phone_numbers\":[{\"id\":\"IDENTIFIER_ID\",\"object\":\"phone_number\",\"phone_number\":\"+15555550105\",\"reserved_for_second_factor\":false,\"default_second_factor\":false,\"reserved\":false,\"verification\":{\"object\":\"verification_admin\",\"status\":\"verified\",\"strategy\":\"admin\",\"attempts\":null,\"expire_at\":null},\"linked_to\":[],\"backup_codes\":null,\"created_at\":\"%%DATETIME -7%%\",\"updated_at\":\"%%DATETIME -7%%\"}],\"web3_wallets\":[],\"passkeys\":[],\"external_accounts\":[],\"saml_accounts\":[],\"enterprise_accounts\":[],\"public_metadata\":{},\"unsafe_metadata\":{},\"external_id\":null,\"last_sign_in_at\":\"%%DATETIME -4%%\",\"banned\":false,\"locked\":false,\"lockout_expires_in_seconds\":null,\"verification_attempts_remaining\":100,\"created_at\":\"%%DATETIME -9%%\",\"updated_at\":\"%%DATETIME -3%%\",\"delete_self_enabled\":true,\"create_organization_enabled\":true,\"last_active_at\":\"%%DATETIME -6%%\",\"mfa_enabled_at\":null,\"mfa_disabled_at\":null,\"legal_accepted_at\":\"%%DATETIME -10%%\",\"profile_image_url\":\"URL\",\"organization_memberships\":[]},\"public_user_data\":{\"first_name\":\"%%FIRSTNAME%%\",\"last_name\":\"%%LASTNAME%%\",\"image_url\":\"URL\",\"has_image\":false,\"identifier\":\"%%EMAIL%%\",\"username\":\"userfortests\",\"profile_image_url\":\"URL\"},\"factor_verification_age\":[0,-1],\"created_at\":\"%%DATETIME -4%%\",\"updated_at\":\"%%DATETIME -1%%\",\"last_active_token\":{\"object\":\"token\",\"jwt\":\"e30=.e30=.e30=\"}}],\"sign_in\":null,\"sign_up\":null,\"last_active_session_id\":\"SESSION_ID\",\"last_authentication_strategy\":null,\"cookie_expires_at\":null,\"captcha_bypass\":false,\"created_at\":\"%%DATETIME -5%%\",\"updated_at\":\"%%DATETIME -2%%\"}}"}
Loading