带有 Google 登录帐户的 Google API

Posted

技术标签:

【中文标题】带有 Google 登录帐户的 Google API【英文标题】:GoogleAPI with Google Sign In Account 【发布时间】:2020-08-14 18:10:02 【问题描述】:

我已在我的应用程序中使用 firebase auth 实现了 google 登录。 我正在尝试使用登录的 google 帐户实现 GmailAPI,但无法同时找到有关它们的任何信息。 我正在跟进 https://github.com/dart-lang/googleapis/blob/master/generated/googleapis/lib/gmail/v1.dart 并在代码中实现了这一点

final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn googleSignIn = GoogleSignIn(
  scopes: [
      "https://www.googleapis.com/auth/gmail.compose",
      "https://www.googleapis.com/auth/gmail.insert",
      "https://www.googleapis.com/auth/gmail.labels",
      "https://www.googleapis.com/auth/gmail.metadata",
      "https://www.googleapis.com/auth/gmail.modify",
      "https://www.googleapis.com/auth/gmail.readonly",
      "https://www.googleapis.com/auth/gmail.send",
      "https://www.googleapis.com/auth/gmail.settings.basic",
      "https://www.googleapis.com/auth/gmail.settings.sharing",
    ]
);

用户是否需要在此之后进行身份验证,或者由此生成的uid 足以对用户进行身份验证? 在网上到处都有 googleAPI 示例,用户在网上通过身份验证,我找不到任何 google sign in 的东西。

【问题讨论】:

Github 链接对我不可用,而且它们的公共回购为零:github.com/dartlang @csgabriella github.com/dart-lang/googleapis/blob/master/generated/… 他们昨天更新了链接 您可能不会使用uid 进行身份验证,您可能会使用token 进行身份验证。话虽如此,我已经通过 firebase 设置了 oauth 很多次,而且我从来没有遇到过任何超级复杂的事情,所以如果它变得超级复杂,请返回文档 @ewizard 请检查我在此之后提出的问题。当新用户使用 google 登录应用程序时,它会询问我在范围中添加的邮件设置的权限。现在是什么意思? 【参考方案1】:

我不是颤振专家,但根据here 找到的示例,您需要以编程方式验证firebase 的唯一内容是token_idaccess_token,就像这样:

final AuthCredential credential = GoogleAuthProvider.getCredential(
    accessToken: googleAuth.accessToken,
    idToken: googleAuth.idToken,
  );

据此,要向 firebase 进行身份验证,您只需添加登录范围:'email', 'profile' and 'openid' 或范围:'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile' and 'openid'(它们通常表示相同,具体取决于所使用的库)。然后使用生成的访问令牌,您可以使用 firebase 库对 firebase 进行身份验证,而无需重新进行身份验证。 如果您需要更多信息,请告诉我。

编辑:

您必须找到 Google 登录收到的访问令牌并传递信息以进行 Firebase 登录。访问令牌应如下所示:


        "access_token": "ya29.a0Adw1xekVMTQRK0_EAdr1Pfios97Lnz-VCLTJHw7...",
        "expires_in": 3599, 
        "refresh_token": "1//01iBd1CQsBUl2CgYIARAA...", 
        "scope": "https://www.googleapis.com/auth/userinfo.email openid", 
        "token_type": "Bearer", 
        "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjE31ZmY0ZTEwOTkxZDZiMGA..."

【讨论】:

以上是关于带有 Google 登录帐户的 Google API的主要内容,如果未能解决你的问题,请参考以下文章

Google+ 登录无法正常工作

每次用户登录时,Google 登录都使用相同的帐户

Google+ 登录将用户注销

Google 帐户登录错误(双重身份验证)[关闭]

使用 google 登录可防止用户使用其他帐户再次登录 - iOS

如何在使用 Google 登录按钮时不将 Google 帐户添加到 Android 手机