在 Google 云存储中托管的网页中,我想显示修订历史记录,这需要列出该对象的所有版本。
使用?versions参数向存储桶发送 GET 请求会返回所有对象的版本列表。有没有办法列出单个对象的所有版本,如在gsutil ls -lajavascript 中?
我正在尝试在我的 angular 4 项目中为使用 Google gapi 的服务设置测试。我遇到的问题是变量是全局声明的,但没有被模拟,因此当我运行测试时,我收到以下错误:
参考错误:gapi 未定义
如何模拟 gapi 全局变量(及其对 load 和 auth2 的调用)?
这是我的 2 个类(实现和测试类)
组件类
declare const gapi: any;
@Component({
selector: 'app-register-google',
templateUrl: './register-google.component.html',
styleUrls: ['./register-google.component.css']
})
export class RegisterGoogleComponent implements OnInit, AfterViewInit {...}
Run Code Online (Sandbox Code Playgroud)
测试班
describe('RegisterGoogleComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [RegisterGoogleComponent]
})
.compileComponents();
}));
it('should create', () => {
expect(component).toBeTruthy();
});
});
Run Code Online (Sandbox Code Playgroud) 我已经在 angular 5 中实现了 google-recapthca,它适用于所有浏览器,但在 safari 中我遇到了以下错误:
我的 safari 版本是:12.0
我的 html 代码
<div class="g-recaptcha" id="gAuth" data-sitekey="your_site_key_here"></div>
Run Code Online (Sandbox Code Playgroud) 我有一个 Chrome 扩展程序,它从后端 Node.js 服务器获取文件信息,以便在扩展程序中提供 google 驱动器文件。在这个特定实例中,我遇到的问题是将后端保存的文件上传到前端的gapi客户端,该客户端允许用户将其上传到他们的谷歌驱动器。身份验证一切都很好,主要问题是上传。
这是我的代码。
背景.js(客户端):
var parentFolder;
var fileArray;
let classroomUrl = 'https://connect.smartpathed.com/getclassroomparent';
await fetch(classroomUrl)
.then(response => response.text())
.then(data => parentFolder = data)
.then(data => console.log(parentFolder));
let fileArrayUrl = "https://connect.smartpathed.com/getclassroomarrayselect";
await fetch(fileArrayUrl)
.then(response => response.json())
.then(data => fileArray = data)
.then(data => console.log(fileArray));
function sleep(milliseconds) {
const date = Date.now();
let currentDate = null;
do {
currentDate = Date.now();
} while (currentDate - date < milliseconds);
}
gapi.client.init({
apiKey: API_KEY,
discoveryDocs: DISCOVERY_DOCS,
}).then(function() {
chrome.identity.getAuthToken({interactive: true}, …Run Code Online (Sandbox Code Playgroud) 使用 Google 身份服务 (GSI) 时,我可以显示一个弹出窗口,要求用户连接他们的 Google 帐户。这是有很好的文档记录的,并且它与以下代码配合得很好:
const client = window.google.accounts.oauth2.initCodeClient({
client_id: 'CLIENT_ID',
scope: 'SCOPE',
ux_mode: 'popup',
callback: async (response) => {
console.log('Response Google', response);
},
});
client.requestCode();
Run Code Online (Sandbox Code Playgroud)
但是,如果用户关闭弹出窗口,我希望执行一些操作。我在在线文档和示例中找不到任何内容。我尝试了intermediate_iframe_close_callback和native_callback,但关闭弹出窗口时都没有被调用。
那么,有可能吗?我该怎么做 ?
谢谢
我已经投入了一个旨在利用 YouTube API 的小项目。我有一些基本的代码,我最初认为是,正常工作。
使用 Chrome,我可以使用以下源代码通过我自己网络上的多台机器登录而不会出现任何问题。我还将我的机器连接到我的蜂窝网络,以确保该过程在我自己的网络之外也能正常工作。
不幸的是,我在通过 Chrome 成功登录后找出为什么同事(来自远程位置)无法在页面刷新之间保留他的登录状态时遇到问题,尽管在使用 Firefox 时没有明显问题。
举一个成功场景的例子,当第一次加载页面时,如果用户已经登录,则调用分配给的回调authInstance.isSignedIn.listen函数true。
在我同事的机器上,authInstance.isSignedIn.listen登录成功后刷新页面没有调用监听器,说明没有登录。
我目前没有使用 SSL 证书,如果该信息有帮助的话。
其他信息包括我的同事能够在支持 YouTube 身份验证的其他网站上进行身份验证和保持登录状态而不会出现任何问题。我一直无法查看这些网站的来源,因为来源被混淆了。
这是我自己的来源:
<html lang="en">
<head>
<script src="https://apis.google.com/js/platform.js?onload=onLoad" async defer></script>
</head>
<body>
<button id="sign-in">Sign In</button>
<button id="sign-out">Sign Out</button>
<script>
var authInstance;
var signInBtn = document.getElementById('sign-in');
var signOutBtn = document.getElementById('sign-out');
function onLoad() {
gapi.load('auth2', function() {
console.log('loadAuth2()');
auth2 = gapi.auth2.init({
client_id: '[CLIENT_ID]',
});
authInstance = gapi.auth2.getAuthInstance();
authInstance.isSignedIn.listen(function () {
console.log('authUpdate()');
console.log(arguments);
});
});
}
signInBtn.onclick = …Run Code Online (Sandbox Code Playgroud)javascript browser authentication oauth-2.0 google-api-js-client
根据谷歌:
用户身份验证和授权不再需要旧版 Google 登录平台库:apis.google.com/js/platform.js 和适用于 JavaScript 的 Google API 客户端库:gapi.client。它们已被一个新的 Google Identity Services JavaScript 库所取代:accounts.google.com/gsi/client。
使用较旧的库,您既可以对网站的用户进行身份验证,也可以向 google api 发出授权请求,例如日历。
据我所知,文档中没有任何信息重新说明如何向 google api(例如日历)发出经过身份验证的请求。
新 api 是否仅替换仅登录的应用程序的旧 api?我是否缺少使用新 api 发出经过身份验证的请求的方法?
由于此处描述的已知问题 ( 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 年被弃用。但是:
gapi可用的情况下加载选择器?或者gapi仍然需要导入但不会包含任何登录相关的方法?GoogleAuth.isSignedIn仅说明“删除。用户当前在 Google 上的登录状态不可用。用户必须登录 Google 才能获得同意和登录时刻。” 那有什么意思?我需要检查用户是否已登录,以便每次他们想从 gPicker 上传文件时不再显示弹出窗口...access_token的回调上有 a ,现在我们如何获取 token 呢?reloadAuthResponsesignIn抱歉这个问题令人困惑,我对一切都很困惑。任何输入都有帮助,谢谢!
google-api google-oauth google-api-js-client google-picker google-signin
如何使用新系统 (GIS) 获取刷新的 ID 令牌?
我有一个网络应用程序,它使用 Google 登录并将 id_token 发送到我的服务器以使用某些 GCP 服务。我按以下方式使用 GAPI Signin2/auth2:
gapi.client.init(API_KEY, OAUTH_CLIENT_ID, SCOPES), SCOPES 只有 userinfo.email 和个人资料gapi.auth2.getAuthInstance().currentUser.get()(如果用户未登录,则呈现登录按钮)currentUser.hasGrantedScopes(SCOPES):
gapi.client.getToken()这会给我一个{ id_token, access_token }在我的 NodeJS 服务器上,我将使用 google-auth-library 中的 OAuth2Client:
使用创建一个新的 OAuth2Client 实例new OAuth2Client(OAUTH_CLIENT_ID)
当客户端发送请求时,从凭据中提取 id_token 并调用:
oauthClient.verifyIdToken({ idToken: idToken, 受众: OAUTH_CLIENT_ID, })
在此结果上调用 getPayload() 将为我提供用户的 Google id,然后我可以用它来存储由它键入的数据等。
当服务器发现id_token已过期时,会因verifyIdToken()而出错。
客户端将捕获令牌过期错误并通过执行以下操作发出刷新:
authInstance.currentUser.get().reloadAuthResponse()====
好吧,现在 Google 表示他们将在新库(Google Identity …
google-oauth google-api-js-client google-identity-toolkit google-signin google-identity
我正在制作一个纯粹的客户端网络应用程序,它显示用户 Google 日历中的一些信息。他们通过 OAuth,授予日历访问权限,然后查看派生信息。按照Google Calendar JS 快速入门,我基本上可以正常工作了。
问题是,访问令牌的有效期仅为 1 小时(3599 秒)。之后,我需要再次让用户完成整个 OAuth 流程以获取新令牌,这需要在三个屏幕上单击四次。有什么办法可以避免每次都需要征求新的同意吗?
google-oauth ×4
javascript ×4
oauth-2.0 ×3
angular ×2
node.js ×2
browser ×1
google-api ×1
recaptcha ×1
unit-testing ×1