Google Sign-in and Flutter Web

Getting Google Sign-in working with Flutter Web

I have a Flutter app that uses Firebase-Auth and Google Sign-in for authentication. It works on Android and iOS, so it should just work with Flutter web, right? Sadly, no. Here’s what I had to do to get it working.

Add the Firebase Auth Block and JavaScript Libraries

The first thing to do is follow the instructions for configuring a Firebase web app, making sure to add the Firebase Javascript libraries your project uses (see this bug).

<body>
  <!-- The core Firebase JS SDK is always required and must be listed first -->
  <script src="https://www.gstatic.com/firebasejs/7.9.3/firebase-app.js"></script>

  <!-- TODO: Add SDKs for Firebase products that you want to use
       https://firebase.google.com/docs/web/setup#available-libraries -->
  <script src="https://www.gstatic.com/firebasejs/7.8.2/firebase-auth.js"></script>

  <script>
    // Your web app's Firebase configuration
    var firebaseConfig = {
      apiKey: "[REDACTED]",
      authDomain: "[REDACTED].firebaseapp.com",
      databaseURL: "https://[REDACTED].firebaseio.com",
      projectId: "[REDACTED]",
      storageBucket: "[REDACTED].appspot.com",
      messagingSenderId: "[REDACTED]",
      appId: "[REDACTED]"
    };
    // Initialize Firebase
    firebase.initializeApp(firebaseConfig);
  </script>
  ...
</body>

Configure OAuth

The second thing was to configure the project’s OAuth consent screen on Google Cloud.

Add the client ID to the head of index.html:

<head>
  ...
  <meta name="google-signin-client_id"
        content="[REDACTED].apps.googleusercontent.com">
</head>

Add localhost for Local Development

While in Google Cloud, go to the Credential section and add localhost:5000 to the Authorised JavaScript origins.

Run From the Command Line

Now we can run our app:

flutter run -d chrome --web-hostname localhost --web-port 5000

Edit the URL in the Browser

If you see [::1]:5000 in your browser’s URL, change it to localhost:5000 and all should work.

Comments