我再次按照本教程使用php在Google Drive上上传了一个文件,直接从我的远程服务器上:因此,我从Google API控制台创建了新的API项目,启用了Drive API服务,请求了OAuth客户端ID和客户端机密,将它们写在脚本中,然后将其与Google APIs客户端库for php文件夹一起上传到http://www.myserver.com/script1.php中,以检索Auth代码:
<?php
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';
$drive = new Google_Client();
$drive->setClientId('XXX'); // HERE I WRITE MY Client ID
$drive->setClientSecret('XXX'); // HERE I WRITE MY Client Secret
$drive->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));
$gdrive = new Google_DriveService($drive);
$url = $drive->createAuthUrl();
$authorizationCode = trim(fgets(STDIN));
$token = $drive->authenticate($authorizationCode);
?>
当我访问http://www.myserver.com/script1.php时,我允许授权并获得可以在第二个脚本中编写的Auth代码。然后我把它上传到http://www.myserver.com/script2.php,看起来像:
<?php
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';
$drive = new Google_Client();
$drive->setClientId('X'); // HERE I WRITE MY Client ID
$drive->setClientSecret('X'); // HERE I WRITE MY Client Secret
$drive->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));
$gdrive = new Google_DriveService($drive);
$_GET['code']= 'X/XXX'; // HERE I WRITE AUTH CODE RETRIEVED AFTER RUNNING REMOTE script.php
file_put_contents('token.json', $drive->authenticate());
$drive->setAccessToken(file_get_contents('token.json'));
$doc = new Google_DriveFile();
$doc->setTitle('Test Drive');
$doc->setDescription('Document');
$doc->setMimeType('text/plain');
$content = file_get_contents('drive.txt');
$output = $gdrive->files->insert($doc, array(
'data' => $content,
'mimeType' => 'text/plain',
));
print_r($output);
?>
好了,现在文件Drive.txt被上传到我的Google驱动器上,token.json文件的结构是:
{"access_token":"XXX","token_type":"Bearer","expires_in":3600,"refresh_token":"YYY","created":1365505148}
现在,可以想象,我可以调用script2.php并上传文件直到某个时间。最后,重点是:我不希望令牌过期,我不希望每次过期时都允许授权(回想一下script1.php):我需要在白天周期性地调用script2.php,以便自动上传我的文件,无需用户交互。那么,在这种上下文中自动永久刷新令牌的最佳方法是什么?我需要另一个剧本吗?我可以在script2.php中添加一些代码吗?还是修改token.json文件?在令牌过期之前,我可以在哪里读取剩余的时间?谢了!
您不必周期性地请求访问令牌。如果您有refresh_token,PHP客户端将自动为您获取一个新的访问令牌。
为了检索refresh_token,您需要将access_type设置为“脱机”并请求脱机访问权限:
$drive->setAccessType('offline');
一旦获得代码
,
$_GET['code']= 'X/XXX';
$drive->authenticate();
// persist refresh token encrypted
$refreshToken = $drive->getAccessToken()["refreshToken"];
对于以后的请求,请确保始终设置刷新的令牌:
$tokens = $drive->getAccessToken();
$tokens["refreshToken"] = $refreshToken;
$drive->setAccessToken(tokens);
$drive->refreshToken($refreshToken);
注意,refresh_token
将只在第一个$drive->authenticate()
时返回,您需要永久存储它。为了获得一个新的refresh_token,您需要撤消现有的token,并再次启动auth进程。
离线访问在Google的OAuth2.0文档中有详细解释。
application.yml:
null 我目前拥有的是以下内容:当密码哈希和用户名在数据库中匹配时,刷新令牌endpoint生成一个JWT。每个刷新令牌都有一个存储在数据库中的jti,以及过期(仅用于DB清理)、device_id和一个revoked标志。可以使用refresh令牌命中另一个endpoint,该令牌返回一个JWT访问令牌。访问令牌的有效期为15分钟。无法吊销访问令牌。 我的问题出现在需求1上。我不希望用户在与网
在我的Java/Ionic2应用程序中,我通过REST服务请求使用刷新令牌对Google Drive进行身份验证,然后使用access_type=offline,如下所述:https://developers.Google.com/identity/protocols/oauth2webserver#refresh。 服务器响应200 OK,所以它给我一个刷新和一个访问令牌,只是在我第一次请求访问
我有一个表用户,我需要不断上传,所以一旦更新,我想直接重新启动命令。 实际上,我使用的是一个cron,它每分钟都会用Laravel启动自己(
问题内容: 我正在使用Firebase电子邮件/密码身份验证。用户成功登录后,我将通过以下方式查询访问令牌: 根据Firebase文档,访问令牌会在1小时后过期。为了处理在我的应用程序中始终具有当前访问令牌的情况,我在寻找解决方案,并且在firebase文档中发现我必须注册Firebase.IdTokenListener来侦听 onIdTokenChanged事件 我的问题是 : onIdToke
onIdTokenChanged事件 我的问题是: onIdTokenChanged事件 IDTokenListener 被触发。但这不是我要找的。