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,这让这个过程变得更加容易和顺畅。
我刚刚在 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,这让这个过程变得更加容易和顺畅。