supabase-js icon indicating copy to clipboard operation
supabase-js copied to clipboard

TypeError: Network request failed on sign up / sign in on Android

Open maxwowo opened this issue 2 years ago • 21 comments

Bug report

  • [x] I confirm this is a bug with Supabase, not with my own application.
  • [x] I confirm I have searched the Docs, GitHub Discussions, and Discord.

Describe the bug

Signing in or up on Android emulator locally results in TypeError: Network request failed. This error only shows up on the Android emulator and not the iOS one

To Reproduce

Minimal reproducible example: https://github.com/maxwowo/sbrepro

Environment:

  • Java: openjdk 11.0.19 2023-04-18 LTS
  • Node: v16.20.2
  1. Clone repo
  2. supabase start
  3. yarn install
  4. yarn android
  5. Click on either Sign up or Sign in

Expected behavior

Should sign up or sign in without error

Screenshots

https://github.com/supabase/supabase-js/assets/40416283/b85f24b7-3c1f-4f0a-ad56-484ce0fd4964

System information

  • OS: macOS Sonoma 14.0
  • Browser (if applies) N/A
  • Version of supabase-js: 2.38.1
  • Version of Node.js: v16.20.2

Additional context

Add any other context about the problem here.

maxwowo avatar Oct 16 '23 06:10 maxwowo

Started happening to me too once locally running supabase, since last year i changed nothing but only running supabase locally instead of having it hosted online and it keeps giving me network request failed aswell.

Killbyfire avatar Oct 17 '23 20:10 Killbyfire

+1 on this. I also get the Network request failed on Android Emulator and additionally, the session is not available after login. No such issues with ios simulator

atanaskanchev avatar Oct 19 '23 12:10 atanaskanchev

Here some debug logging from auth

export const supabase = createClient<Database>(config.supabaseUrl, config.supabaseAnonKey, {
  auth: {
   storage: AsyncStorage,
    autoRefreshToken: true,
    persistSession: true,
    detectSessionInUrl: false,
    debug: true
  }
})
 ERROR  [TypeError: Network request failed]
 LOG  {"error": null, "isLoading": false, "session": null}
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:27.628Z #_autoRefreshTokenTick() begin
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:27.630Z #_acquireLock begin 0
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:27.631Z #_acquireLock lock acquired for storage key sb-localhost-auth-token
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:27.631Z #_useSession begin
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:27.631Z #__loadSession() begin
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:27.632Z #getSession() session from storage null
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:27.633Z #__loadSession() end
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:27.634Z #_autoRefreshTokenTick() no session
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:27.634Z #_useSession end
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:27.634Z #_autoRefreshTokenTick() end
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:27.634Z #_acquireLock lock released for storage key sb-localhost-auth-token
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:27.635Z #_acquireLock end
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:57.646Z #_autoRefreshTokenTick() begin
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:57.647Z #_acquireLock begin 0
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:57.647Z #_acquireLock lock acquired for storage key sb-localhost-auth-token
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:57.648Z #_useSession begin
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:57.648Z #__loadSession() begin
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:57.650Z #getSession() session from storage null
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:57.650Z #__loadSession() end
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:57.651Z #_autoRefreshTokenTick() no session
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:57.653Z #_useSession end
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:57.654Z #_autoRefreshTokenTick() end
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:57.654Z #_acquireLock lock released for storage key sb-localhost-auth-token
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:46:57.655Z #_acquireLock end
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:47:27.662Z #_autoRefreshTokenTick() begin
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:47:27.663Z #_acquireLock begin 0
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:47:27.664Z #_acquireLock lock acquired for storage key sb-localhost-auth-token
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:47:27.664Z #_useSession begin
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:47:27.664Z #__loadSession() begin
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:47:27.664Z #getSession() session from storage null
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:47:27.665Z #__loadSession() end
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:47:27.665Z #_autoRefreshTokenTick() no session
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:47:27.665Z #_useSession end
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:47:27.665Z #_autoRefreshTokenTick() end
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:47:27.665Z #_acquireLock lock released for storage key sb-localhost-auth-token
 LOG  GoTrueClient@0 (2.56.0) 2023-10-19T12:47:27.665Z #_acquireLock end

atanaskanchev avatar Oct 19 '23 12:10 atanaskanchev

Tried downgrading to "@supabase/supabase-js": "2.33.2" but the issue is still there. I wonder if it's related to Sonoma

atanaskanchev avatar Oct 19 '23 12:10 atanaskanchev

Will make a PlayStore build to see if this is only local and report back

atanaskanchev avatar Oct 19 '23 14:10 atanaskanchev

I've since then switched to developing with Supabase Cloud. No such problems whatsoever. Haven't exceeded the limits on the free tier either so far. Would suggest the same if you've been blocked by this for a while

maxwowo avatar Oct 22 '23 01:10 maxwowo

I'm running into this on Android Emulator and iOS on Expo Go. Anyone get around this other than using Supabase Cloud?

caseydierking avatar Feb 25 '24 16:02 caseydierking

My problem was in supabase api url - instead of default I replaced it with http://10.0.2.2:54321 as your emulator does not work with http://127.0.0.1:54321.

The reason is that 10.0.2.2 points to your actual machine instead of some loopback service.

@caseydierking try this and let me know if it works for you

carodej avatar Feb 26 '24 08:02 carodej

@carodej Unfortunately it did not work. Out of curiosity, I wondered if it was because of an http/https issue. So I tunneled it through ngrok and it worked. That is not a great long term solution though.

caseydierking avatar Feb 28 '24 12:02 caseydierking

@caseydierking this solved it for me:

  • app.config.ts
 extra: {
    ...
  plugins: [
    ...
    [
      'expo-build-properties',
      {
        android: {
          usesCleartextTraffic: true
        }
      }
    ]
  ],
  • EXPO_PUBLIC_SUPABASE_URL=http://192.168.1.110:54321

atanaskanchev avatar Feb 29 '24 19:02 atanaskanchev

@atanaskanchev That worked. Thanks!

caseydierking avatar Mar 02 '24 02:03 caseydierking

My problem was in supabase api url - instead of default I replaced it with http://10.0.2.2:54321 as your emulator does not work with http://127.0.0.1:54321.

The reason is that 10.0.2.2 points to your actual machine instead of some loopback service.

@caseydierking try this and let me know if it works for you

This worked. Thank you!

Teegreat avatar Mar 30 '24 06:03 Teegreat

changing the supabaseUrl from http://127.0.0.1:54321 to http://10.0.2.2:54321 worked for me.

TARishabh avatar Apr 07 '24 17:04 TARishabh

How did you change your url?

BigDrems avatar Jun 21 '24 05:06 BigDrems

changing the supabaseUrl from http://127.0.0.1:54321/ to http://10.0.2.2:54321/ worked for me.

I tried this, and the only thing that changed was I got the network error after 2 minutes of wait time.

But I got it working by tunneling it through Cloudflare, by which I got a HTTPS URL, not a permanent solution but fulfills the need for the moment.

cloudflared tunnel --url http://127.0.0.1:54321

dev-shetty avatar Jul 07 '24 13:07 dev-shetty

Here's my solution:

import Constants from "expo-constants";

// Types on this are wrong. This exists, and `host` does not.
const origin = (
  Constants?.expoConfig as unknown as { hostUri?: string }
)?.hostUri
  ?.split(":")
  .shift();

if (!origin) throw new Error("Could not determine origin");

const supabaseUrl = `http://${origin}:54321`;

This is very similar to what is typically needed to connect to local Firebase projects.

As a sanity check, I'd recommend logging hostUri, and try going to hostUri:54323 in your phone's browser. That should show the Supabase dashboard.

FWIW, this should apply for both ios and android. This is JS issue, not a native issue

JacobJaffe avatar Jul 29 '24 23:07 JacobJaffe

Changing the supabaseUrl from http://127.0.0.1:54321/ to http://10.0.2.2:54321/ fixed it for Android, but then iOS got the Network request failed error. So seems like you need to either use conditional logic that checks the platform, like Platform.select(...) and return the appropriate url, or read the expoConfig.hostUri as mentioned by @JacobJaffe.

I went with the expoConfig approach. Also, it looks like they fixed the types on that so no need for casting to unknown.

blwinters avatar Sep 09 '24 07:09 blwinters

Here's my solution:

import Constants from "expo-constants";

// Types on this are wrong. This exists, and `host` does not.
const origin = (
  Constants?.expoConfig as unknown as { hostUri?: string }
)?.hostUri
  ?.split(":")
  .shift();

if (!origin) throw new Error("Could not determine origin");

const supabaseUrl = `http://${origin}:54321`;

This is very similar to what is typically needed to connect to local Firebase projects.

As a sanity check, I'd recommend logging hostUri, and try going to hostUri:54323 in your phone's browser. That should show the Supabase dashboard.

FWIW, this should apply for both ios and android. This is JS issue, not a native issue

Thank you! This worked 🔥

Mvrs avatar Oct 03 '24 08:10 Mvrs