繁体   English   中英

使用API​​同意屏幕通过PHP将文件上传到Google云端硬盘

[英]Upload file via PHP to Google Drive using API no consent screen

按照本教程中的步骤操作后,我可以通过API将文件上传到我的Google云端硬盘,而优先事项是无需用户确认同意就可以上传文件。

如何在没有用户干预的情况下授权应用程序(网络或已安装)? (规范?)

但是,我注意到刷新令牌必须每次都更新,因此,我正在寻找另一种解决方案来发送文件,而无需将同意屏幕发送给用户。

http://ben.akrin.com/?p=2080

在最初的几个小时中,一切进展顺利,但是,现在它不返回TOKEN,因此不再进行上传。

 <?php function get_access_token( $force_refresh=false ) { global $client_id, $client_secret, $refresh_token, $verbose ; if( $verbose ) { echo "> retrieving access token<br />" ; } $token_filename = "/tmp/access_token_" . md5( $client_id . $client_secret . $refresh_token ) ; $access_token = "" ; if( !file_exists($token_filename) || $force_refresh===true ) { // no previous access token, let's get one if( $verbose ) { echo "> getting new one<br />" ; } $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, "https://accounts.google.com/o/oauth2/token" ) ; curl_setopt( $ch, CURLOPT_PORT , 443 ) ; curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ) ; curl_setopt( $ch, CURLOPT_POST, 1 ) ; curl_setopt( $ch, CURLOPT_POSTFIELDS, "client_id={$client_id}&client_secret={$client_secret}&refresh_token={$refresh_token}&grant_type=refresh_token" ) ; curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ) ; curl_setopt( $ch, CURLOPT_HEADER, true ) ; curl_setopt( $ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded") ) ; echo "Curl error: " . curl_error($ch) . "<br />"; $response = curl_exec( $ch ) ; $response = parse_response( $response ) ; // todo: make sure that we got a valid response before retrieving the access token from it $access_token = json_decode( $response["body"] ) ; $access_token = $access_token->access_token ; file_put_contents( $token_filename, $access_token ) ; } else { // we already have something cached, with some luck it's still valid $access_token = file_get_contents( $token_filename ) ; if( $verbose ) { echo "> from cache<br />" ; } } if( $access_token=="" ) { echo "ERROR: problems getting an access token<br />" ; exit( 1 ) ; } return $access_token ; } ?> 

是否可以在没有同意屏幕的情况下将我的应用程序与Google云端硬盘集成,而无需始终更新此令牌?

我写了你提到的答案。

您误解了刷新令牌是什么。 获得刷新令牌后,应安全地存储它,并在需要访问令牌时重新使用它。 刷新令牌不会过期-通常不会,请参阅下文。 因此,当您说“我注意到刷新令牌必须每次都更新”时,事实并非如此。

通常,您只会在第一次请求时获得刷新令牌。 后续请求将返回null。 用户将需要撤销授权并重新授权才能获得另一个令牌。 但是,再次,您应该存储获取的第一个刷新令牌,并无限期地重复使用它。

刷新令牌过期时...刷新令牌的寿命非常长,但有时Google会将其过期。 一种情况(我从传闻中认为)是,如果用户更改密码,令牌可能会过期。 这将是有道理的,因为存储的刷新令牌大致类似于存储的用户名/密码。 我还看到令牌在创建后6个月左右就没有明显原因过期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM