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.
我有一个 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.