如何登录到谷歌的具体云端硬盘帐户通过JavaScript谷歌云端硬盘API
我试图通过JavaScript的谷歌云端硬盘API运行一个脚本了我的谷歌云端硬盘。这工作正常,但只有当我在打开的弹出窗口登录到我的帐户。我希望每次都登录到同一个帐户,所以想知道是否有任何方法可以自动登录,以避免用户输入登录信息。如何登录到谷歌的具体云端硬盘帐户通过JavaScript谷歌云端硬盘API
总之,你必须登录至少一次,谷歌身份提供JSON网络令牌到期后每次。我不确定Goolge Drive API会持续多久,但通常这些标记可能适用于从单个请求到天的任何地方。
下面是谷歌API的OAuth2 https://developers.google.com/identity/protocols/OAuth2
文档开始=>
- 刷新访问令牌,如果必要的话。
访问令牌的生命周期有限。如果您的应用程序在单个访问令牌的生命周期之外需要访问 以访问Google API,则它可以通过 获取刷新令牌。刷新令牌允许您的应用程序以 获取新的访问令牌。
注:保存在安全的长期存储刷新令牌,继续 只要他们仍然有效地使用它们。限制适用于每个客户端用户发出的组合,每 用户在所有的客户 刷新令牌的数量,而这些限制是不同的。如果您的 应用程序请求足够的刷新令牌以超过 限制之一,则旧的刷新令牌停止工作。
Google提供了一个快速入门指南,用于通过Google Apis实现用户签名。 Google使用您必须在Google中注册为客户端应用程序的OAuth2协议。一旦注册为客户端应用程序,您将获得一个客户端ID,您通常会以某种形式的应用程序初始化向您的应用程序提供该ID。
这里是他们的快速入门指南的链接,这将帮助你开始: https://developers.google.com/drive/v3/web/quickstart/js
注意,这是一个不演示如何可能接近持久化JSON网络令牌一个基本的例子,使用户不必在每个请求上登录。我概述了一种管理JavaScript和Angular中的身份验证的简单方法,可以让您朝着正确的方向前进,但方向不完整。
例如,在角:
// Configures the required variables before Running an Instance of the App
angular.module("yourModuleName").config(configureApp);
和
// Executed when the App Instance launches, allowing you to connect to Google APIs when the App starts
angular.module("yourModuleName").run(runApp);
凡configureApp和runApp是处理在AngularJS框架应用程序初始化JS功能。以下示例中的代码将从其自己的应用的REST API中检索Google Apps Client ID。这仅仅是在那里你可以检索存储这些凭据的例子,但最有可能不是最安全的例子:
var configureApp = function($http,$window) {
// Setup your CLIENT ID from your own REST API (or any other mechanism you may choose)
var httpPromise = $http.get("http://myApp.myDomain.com/config/googleClient");
// Handle the Response from the above GET Request
httpPromise.then(
// Handle Success
function(response) {
// Store the CLIENT ID in local storage for example
$window.localStorage.setItem("GOOGLE_API_CLIENT_ID", response.data.clientId);
// Setup the App Wide variables for Google API
// Client ID and API key from the Developer Console
var CLIENT_ID = response.data.clientId;
// Array of API discovery doc URLs for APIs used by the quickstart
var DISCOVERY_DOCS = ["https://www.googleapis.com/discovery/v1/apis/drive/v3/rest"];
// Authorization scopes required by the API; multiple scopes can be
// included, separated by spaces.
var SCOPES = 'https://www.googleapis.com/auth/drive.metadata.readonly';
// Do more initialization configuration
};
var runApp = function() {
// Initialize the API
gapi.client.init({
discoveryDocs: DISCOVERY_DOCS,
clientId: CLIENT_ID,
scope: SCOPES
}).then(function() {
// Listen for sign-in state changes.
gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);
// Handle the initial sign-in state.
updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());
authorizeButton.onclick = handleAuthClick;
signoutButton.onclick = handleSignoutClick;
});
}
哪些功能与角度使用将取决于所期望的应用生命周期,你需要在目标一个Angularjs应用程序。这种方法可以应用于其他JS框架,如React和Backbone。
为了突出文档中的另一个角度,updateSigninStatus
将是一个很好的地方,可以捕获Google授权请求返回的JSON Web令牌,此时您可以将此令牌存储在浏览器的window.localStorage中以供重用。
只要Google API需要验证,您就可以重复使用令牌。代币通常有一个到期。在令牌到期之前,您将能够阻止API显示登录模式。
这确实意味着您仍然必须使用此方法来管理授权过程背后的逻辑,监控来自Google的任何请求令牌刷新或重新认证的响应。
Auth0是一个很好的身份验证和授权插件,提供多种语言用于连接Google和许多其他OAuth2身份提供商。 Google Drive API使用他们自己的身份提供商服务,根据您注册的应用的客户端ID来确认您的应用用户的身份。
这里是我的,需要我使用谷歌身份提供实现授权项目实施授权时发现链接: https://jwt.io/ https://auth0.com/ Best practices for authentication and authorization in Angular without breaking RESTful principles? https://thinkster.io/tutorials/angularjs-jwt-auth
这个答案有些好东西,但我不认为它解决了OP的问题 – pinoyyid
@pinoyyid我确保在第一段中回答他的问题,指出用户每次JSON Web令牌或刷新令牌过期时都必须至少登录一次。这篇文章的其余部分解释了为什么以及如何创建一种机制,以减少初次登录后的模态弹出登录 – Matt
当然,但我的理解是,用户访问他们自己的Google帐户时,他希望所有用户访问一个共同的帐户。因此他正在寻找一种方法来避免用户必须知道通用帐户的用户名和密码。这可以通过集中存储的刷新令牌来实现。 – pinoyyid