Google 选择器 API 不再允许登录

Google picker API no longer allowing sign-in

我有一个 google 选择器 API 设置,它在我的本地机器上运行良好。它在部署的环境中也能正常运行一两周,但现在它会导致错误。在这个新错误发生之前,我没有在 google 开发人员控制台中进行任何更改。

我得到的错误是“为了 select 文件,您必须登录到您的 Google 帐户。”当您尝试登录时,window 在后台闪烁,然后在您看到它是什么之前关闭。尝试几次后,您会收到以下错误:

400. That’s an error.

The server cannot process the request because it is malformed. It should not be retried. That’s all we know.

在控制台中,当您尝试登录时出现错误:

Uncaught Error: ub
    at m=opnc:1061
    at e.O (m=opnc:402)
    at Hfa (m=opnc:405)
    at Dfa (m=opnc:405)
    at _.ik.Yx (m=opnc:405)
    at tfa (m=opnc:396)

知道我做错了什么吗?这是我的代码:

<script type="text/javascript">
var developerKey = my_developer_key;
var clientId = my_client_id;
var appId = my_google_app_id;

// Scope to use to access user's Drive items.
var scope = ['https://www.googleapis.com/auth/drive.file'];

var pickerApiLoaded = false;
var oauthToken;
var tryImmediate = false;

// Use the Google API Loader script to load the google.picker script.
function loadPicker() {
  oauthToken = null;
  $('#select_file').focus(function() {
        this.blur();
    });
  gapi.load('auth', {'callback': onAuthApiLoad});
  gapi.load('picker', {'callback': onPickerApiLoad});
}

function onAuthApiLoad() {
  window.gapi.auth.authorize(
      {
        'client_id': clientId,
        'scope': scope,
        'immediate': true
      },
      handleAuthResult);
}

function onPickerApiLoad() {
  pickerApiLoaded = true;
  createPicker();
}

function handleAuthResult(authResult) {
  if (authResult && !authResult.error) {
    oauthToken = authResult.access_token;
    createPicker();
  } else if (tryImmediate===false) {
      // try with immediate false if user is not logged in
      tryImmediate = true;
      window.gapi.auth.authorize(
      {
        'client_id': clientId,
        'scope': scope,
        'immediate': false
      },
      handleAuthResult);
  }
}

// create and render a picker object
function createPicker() {
  if (pickerApiLoaded && oauthToken) {
    var folderID = my_folder_id;
    var view = new google.picker.DocsView().setIncludeFolders(true).setParent(folderID);
    var picker = new google.picker.PickerBuilder()
        .enableFeature(google.picker.Feature.NAV_HIDDEN)
        .setAppId(appId)
        .setOAuthToken(oauthToken)
        .addView(view)
        .setDeveloperKey(developerKey)
        .setCallback(pickerCallback)
        .build();
     picker.setVisible(true);
  }
}

// A simple callback implementation.
function pickerCallback(data) {
  if (data.action == google.picker.Action.PICKED) {
    var fileName = data.docs[0].name;
    var fileID = data.docs[0].id;
    $('#fileName').val(fileName);
    $('#fileID').val(fileID);
    $('#file').text('File selected: ' + fileName);
  }
  validateForm()
}
</script>

使用此按钮启动:

<input id="select_file" onClick="loadPicker(); return false;" value="Select File" class="btn">

由于这只发生在一个特定的用户身上,因此最好分析他们的这种行为,如果需要,可以通过选择本文中的选项之一来联系 Google Workspace 支持 here.