如何将 Google Picker 与新的 Google Identity Services JavaScript 库集成

Gab*_*lle 5 google-api google-oauth google-api-js-client google-picker google-signin

由于此处描述的已知问题 ( https://developers.google.com/identity/sign-in/web/troubleshooting ),我想更新我的应用程序以使用新的 gsi 登录,该登录使用的 cookie 少于以前的版本,因此可能有上述错误的解决方案......

我的问题是,几乎没有关于如何将 google picker 与新 gsi 集成的文档。

我曾经用于gapi一些与选择器相关的代码,例如加载库gapi.load('picker', () => {})。迁移文档表示要用apis.google.com/js/api.js新的 gsi url 替换 ,并且许多其他方法(例如googleAuth.signIn或 )gapi.client.init现在将在 2023 年被弃用。但是:

  1. 如何在没有gapi可用的情况下加载选择器?或者gapi仍然需要导入但不会包含任何登录相关的方法?
  2. 我将如何传递 apiKey 和范围才能初始化 googlePicker?
  3. 对于诸如文档之类的方法,GoogleAuth.isSignedIn仅说明“删除。用户当前在 Google 上的登录状态不可用。用户必须登录 Google 才能获得同意和登录时刻。” 那有什么意思?我需要检查用户是否已登录,以便每次他们想从 gPicker 上传文件时不再显示弹出窗口...
  4. 之前我们在 a或 aaccess_token的回调上有 a ,现在我们如何获取 token 呢?reloadAuthResponsesignIn

抱歉这个问题令人困惑,我对一切都很困惑。任何输入都有帮助,谢谢!

小智 3

我通过以下方式遇到了https://developers.google.com/identity/oauth2/web/guides/use-token-model:How to use scoped APIs with (GSI) Google Identity Services

我更改了代码来加载此脚本:https://accounts.google.com/gsi/client,然后修改了我们的“授权”函数(见下文)以使用window.google.accounts.oauth2.initTokenClient而不是window.gapi.auth2.authorize获取access_token.

请注意,回调已从window.gapi.auth2.authorize函数的第二个参数移至callback函数第一个参数的属性window.google.accounts.oauth2.initTokenClient

调用后tokenClient.requestAccessToken()(见下文),传递给的回调window.gapi.auth2.authorize将使用包含access_token.

const authorize = () =>
-    new Promise(res => window.gapi.auth2.authorize({
-        client_id: GOOGLE_CLIENT_ID,
-        scope: GOOGLE_DRIVE_SCOPE
-    }, res));
+    new Promise(res => {
+        const tokenClient = window.google.accounts.oauth2.initTokenClient({
+            client_id: GOOGLE_CLIENT_ID,
+            scope: GOOGLE_DRIVE_SCOPE,
+            callback: res,
+        });
+        tokenClient.requestAccessToken();
+    });
Run Code Online (Sandbox Code Playgroud)

使用的方式access_token没有改变:

new window.google.picker.PickerBuilder().setOAuthToken(access_token)
Run Code Online (Sandbox Code Playgroud)