在不启动浏览器的情况下使google_sign_in身份验证无效

时间:2019-09-29 15:08:22

标签: flutter oauth oauth-2.0 google-oauth google-oauth2

我想使用Flutter的Google登录(https://pub.dev/packages/google_sign_in)软件包不使用 Firebase。我已经使用以下代码成功实现了它:

  GoogleSignIn _googleSignIn = GoogleSignIn(
    scopes: [
      'email',
      'https://www.googleapis.com/auth/contacts.readonly',
    ],
  );

  Future<void> _handleSignIn() async {
    try {
      await _googleSignIn.signIn();
    } catch (error) {
      print(error);
    }
  }

//...
     child: FlatButton(
        onPressed: () => _handleSignIn(),
//...

但是,这会在浏览器中启动oauth。如何停止浏览器启动,而是显示打开用于oauth的漂亮对话框?

我已经看到了Google登录Flutter软件包与Firebase Auth结合使用以进行应用内身份验证的示例。但是,如果没有firebase身份验证,是否可以这样做?

我还从这里(How is OAuth 2 different from OAuth 1?)了解到,oauth 2.0是我需要用于应用内身份验证的内容。这是否意味着我不能使用google-sign-in软件包?似乎此程序包仅使用oauth1。这是正确的吗?

我也看到了这个oauth2.0 flutter软件包(https://pub.dev/packages/oauth2)。是否可以将其与google-signin结合使用以实现应用内身份验证,而不是启动浏览器?

我对一切之间的相互关系有些困惑,我们将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

OAuth 1.0已过时,不应使用。

OAuth 2.0需要“用户”提供授权才能将权限委派给您的应用程序。 OAuth 2.0旨在防止凭据(密码)共享,而Google(作为您的授权服务器)将不允许您显示一个对话框,该对话框可能允许您访问用户的凭据。

您应该提供有关特定用例的更多详细信息。

您也许可以使用类似OAuth 2.0 Device Authorization Grant

您可以使用代码设置套接字以侦听授权服务器的响应,以获取访问(或刷新)令牌。

答案 1 :(得分:0)

我意识到发生这种情况的原因是因为我在使用iphone模拟器。