Flutter Web Heroku Google OAuth 失败

Flutter Web Heroku Google OAuth Fails

我刚刚在 Heroku 上部署了一个 Flutter Web 应用程序。

我使用 https://github.com/diezep/heroku-buildpack-flutter 作为 buildpack,它部署得很漂亮。

我的 Flutter 应用使用 Google OAuth 来登录用户。 但显然,OAuth 在 Heroku 上失败了,它在本地完美运行。

我将 heroku URL 添加到 google 云控制台,并且按照 https://medium.com/@wendreof/how-publish-flutter-web-app-on-heroku-github-pages-f4df95bdd385 上的建议,我也将 <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> 添加到我的 web/index.html

但 OAuth 仍然失败。

我正在使用最新的 google_sign_in 软件包 https://pub.dev/packages/google_sign_in

我尝试在 GoogleSignIn 的 catchError 函数中添加打印语句,控制台上打印的错误是:

NoSuchMethodError: method not found: 'toString' on null

我觉得这有点奇怪! (可能这个错误是因为我不能直接打印错误变量?)

这是我的登录代码:

void login() async {
    await GoogleSignIn().signIn().then((accountDetails) {
      accountDetails?.authentication.then((googleKey) {
        localStorageUtilities.setIdToken(googleKey.idToken ?? 'Invalid Token');
        Fluttertoast.showToast(
            msg: "Login Success!",
            toastLength: Toast.LENGTH_LONG,
            gravity: ToastGravity.BOTTOM,
            webBgColor: "#2ecc71",
            timeInSecForIosWeb: 2,
            textColor: Colors.white,
            webPosition: "center",
            fontSize: 16.0);
        Get.offAll(Dashboard());
      }).catchError((err) {
        print(err);
        Fluttertoast.showToast(
            msg: "Login Failed",
            toastLength: Toast.LENGTH_LONG,
            gravity: ToastGravity.BOTTOM,
            webBgColor: "#880808",
            timeInSecForIosWeb: 2,
            textColor: Colors.white,
            webPosition: "center",
            fontSize: 16.0);
      });
    }).catchError((onError) {
      print(onError);
      Fluttertoast.showToast(
          msg: "Login Failed",
          toastLength: Toast.LENGTH_LONG,
          gravity: ToastGravity.BOTTOM,
          webBgColor: "#880808",
          timeInSecForIosWeb: 2,
          textColor: Colors.white,
          webPosition: "center",
          fontSize: 16.0);
    });
  }

知道这是什么原因吗?

最简单的方法:

我最终部署到 Firebase Hosting,这让这个过程变得更加容易和顺畅。