Skip to content
Init is here / May 19 - 23
Back

React native Google OAuth not working - redirect_uri_mismatch

  • 0
  • React Native
  • Auth
qorinn
22 May, 2025, 22:38

Code:

Pretty much just copied from appwrite docs

TypeScript
const signInWithOAuth = async (provider) => {
    setLoading(true);
    try {
      // Create a deep link that works across Expo environments
      // Ensure localhost is used for the hostname to validation error for success/failure URLs
      const deepLink = new URL(makeRedirectUri({ preferLocalhost: false }));
      if (!deepLink.hostname) {
        deepLink.hostname = 'localhost';
      }
      console.log("deeplink: ", deepLink)
      const scheme = `${deepLink.protocol}//`; // e.g. 'exp://' or 'playground://'
      console.log("scheme: ", scheme)
      // Start OAuth flow
      const loginUrl = await account.createOAuth2Token(
        provider,
        `${deepLink}`,
        `${deepLink}`,
      );
      console.log("loginUrl: ", loginUrl)

      // Open loginUrl and listen for the scheme redirect
      const result = await WebBrowser.openAuthSessionAsync(`${loginUrl}`, scheme);
      console.log("openAuthSessionAsync: ", result)
      // Extract credentials from OAuth redirect URL
      const url = new URL(result.url);
      const secret = url.searchParams.get('secret');
      const userId = url.searchParams.get('userId');
      console.log("url: ", url)

      // Create session with OAuth credentials
      const session = await account.createSession(userId, secret);
      // Redirect as needed
      console.log(session)
      const profile = await account.get();
      console.log(profile)
      onSuccess(profile);
    } catch (err) {
      onError(err);
    } finally {
      setLoading(false);
    }
  };

Logs:

schemename is the placeholder for the actual name set for scheme in app.json

TypeScript
deeplink:  "schemename://localhost"
scheme:  schemename://
loginUrl:  "https://cloud.appwrite.io/v1/account/tokens/oauth2/google?success=schemename%3A%2F%2Flocalhost&failure=schemename%3A%2F%2Flocalhost&project=projectId"
TL;DR
Developers are encountering a Google OAuth issue with a redirect_uri_mismatch. The code appears to be copied from the Appwrite docs. The issue seems to be related to the deep link and scheme used. The logs show the creation of the deep link and scheme. Checking if the scheme set in app.json matches the one passed in the code could resolve the redirect_uri_mismatch problem.
Reply

Reply to this thread by joining our Discord

Reply on Discord

Need support?

Join our Discord

Get community support by joining our Discord server.

Join Discord

Get premium support

Join Appwrite Pro and get email support from our team.

Learn more