我正在使用Google API PHP客户端来访问Google Drive API。
我的问题是我想获得访问用户电子邮件的权限。但是,身份验证屏幕未显示我正在寻求的权限。它只显示“应用程序希望......具有离线访问权限。但是当从Google API操场上完成时,它会正确显示对用户电子邮件提示的访问权限。
所以我认为在创建身份验证网址时我的代码级别出了问题。请帮我解决这个问题。
$client = new Google_Client();
$guzzleClient = new \GuzzleHttp\Client(array( 'curl' => array( CURLOPT_SSL_VERIFYPEER => false, ), ));
$client->setHttpClient($guzzleClient);
$client->setAuthConfig($oauth_credentials);
$client->setRedirectUri($redirect_uri);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->setState($this->uri->segment(3));
$client->addScope("https://www.googleapis.com/auth/drive");
答案 0 :(得分:3)
如果你想要的只是当前认证用户的电子邮件地址,你可以直接浏览google drive api。
About.get方法获取有关用户,用户的云端硬盘和系统功能的信息。
{
"user": {
"kind": "drive#user",
"displayName": "Linda Lawton",
"photoLink": "xxxx",
"me": true,
"permissionId": "xxxx",
"emailAddress": "xxxx@gmail.com"
}
}
关于范围的旁注:
Scopes告诉用户您想要访问哪些数据。 https://www.googleapis.com/auth/drive
基本上表示您希望完全访问其Google云端硬盘帐户https://www.googleapis.com/auth/classroom.profile.emails
会请求访问其电子邮件地址。
离线访问
'离线'告诉用户您希望能够在不使用您的应用程序时访问其帐户。通过添加此功能,您将收到一个刷新令牌,您可以随时保存并使用该令牌来获取新的访问令牌以访问用户数据。