Google Drive REST API - 只有一个用户的权限值无效
Google Drive REST API - Invalid permission value for only one user
我在我的应用程序中实现了 Google 驱动器文件权限。一切正常,仅适用于一个用户(电子邮件),当我尝试 insert a permission 时,我得到
bad request (400): Invalid permission value
有人知道为什么我会为一个用户收到此错误吗?我没有看到此用户有任何限制,但也许我错过了什么。
这是我的插入权限函数(我正在使用 google api client (REST API v2)):
public function insert_permission($FileID, $Value, $Type, $Role, $OptParams = array(), $Service = NULL) {
if(empty($Service)) {
$Client = $this->get_client_sa();
$Service = new Google_Service_Drive($Client);
}
$NewPermission = new Google_Service_Drive_Permission();
$NewPermission->setValue($Value);
//$NewPermission->setEmailAddress($Value);
$NewPermission->setType($Type);
// commenter additional role
if($Role == "commenter") {
$Role = "reader";
$NewPermission->setAdditionalRoles(["commenter"]);
}
$NewPermission->setRole($Role);
$i = 0;
$maxTries = 3;
$ErrorMessage = "";
while($i < $maxTries) {
try {
return $Service->permissions->insert($FileID, $NewPermission, $OptParams);
} catch (Exception $E) {
$ErrorMessage = $E->getMessage();
if($E->getCode() != 500)
$i++;
}
}
$this->session->set_userdata("error", $ErrorMessage);
return $E;
}
在调试时我在调用 $this->client->execute($httpRequest)
之前创建了 var_dump($httpRequest);
,并且我得到了这个对象(出于安全和隐私原因,我从对象中删除了用户电子邮件、文件 ID 和授权令牌):
object(Google_Http_Request)#69 (15) {
["batchHeaders":"Google_Http_Request":private]=>
array(3) {
["Content-Type"]=>
string(16) "application/http"
["Content-Transfer-Encoding"]=>
string(6) "binary"
["MIME-Version"]=>
string(3) "1.0"
}
["queryParams":protected]=>
array(0) {
}
["requestMethod":protected]=>
string(4) "POST"
["requestHeaders":protected]=>
array(2) {
["content-type"]=>
string(31) "application/json; charset=UTF-8"
["authorization"]=>
string(183) "token_string"
}
["baseComponent":protected]=>
string(26) "https://www.googleapis.com"
["path":protected]=>
string(72) "/drive/v2/files/file_id/permissions"
["postBody":protected]=>
string(64) "{"role":"writer","type":"user","value":"user_email"}"
["userAgent":protected]=>
NULL
["canGzip":protected]=>
NULL
["responseHttpCode":protected]=>
NULL
["responseHeaders":protected]=>
NULL
["responseBody":protected]=>
NULL
["expectedClass":protected]=>
string(31) "Google_Service_Drive_Permission"
["expectedRaw":protected]=>
bool(false)
["accessKey"]=>
NULL
}
我觉得一切正常,正如我已经说过的,它适用于所有其他用户。我用 Postman 为同一个用户测试了这个调用,它给我带来了问题并且它有效,所以我的代码应该有问题。
现在我完全尴尬了。我没有正确验证用户电子邮件输入,所以它最后有一个 space 字符,这是唯一的问题。
我在我的应用程序中实现了 Google 驱动器文件权限。一切正常,仅适用于一个用户(电子邮件),当我尝试 insert a permission 时,我得到
bad request (400): Invalid permission value
有人知道为什么我会为一个用户收到此错误吗?我没有看到此用户有任何限制,但也许我错过了什么。
这是我的插入权限函数(我正在使用 google api client (REST API v2)):
public function insert_permission($FileID, $Value, $Type, $Role, $OptParams = array(), $Service = NULL) {
if(empty($Service)) {
$Client = $this->get_client_sa();
$Service = new Google_Service_Drive($Client);
}
$NewPermission = new Google_Service_Drive_Permission();
$NewPermission->setValue($Value);
//$NewPermission->setEmailAddress($Value);
$NewPermission->setType($Type);
// commenter additional role
if($Role == "commenter") {
$Role = "reader";
$NewPermission->setAdditionalRoles(["commenter"]);
}
$NewPermission->setRole($Role);
$i = 0;
$maxTries = 3;
$ErrorMessage = "";
while($i < $maxTries) {
try {
return $Service->permissions->insert($FileID, $NewPermission, $OptParams);
} catch (Exception $E) {
$ErrorMessage = $E->getMessage();
if($E->getCode() != 500)
$i++;
}
}
$this->session->set_userdata("error", $ErrorMessage);
return $E;
}
在调试时我在调用 $this->client->execute($httpRequest)
之前创建了 var_dump($httpRequest);
,并且我得到了这个对象(出于安全和隐私原因,我从对象中删除了用户电子邮件、文件 ID 和授权令牌):
object(Google_Http_Request)#69 (15) {
["batchHeaders":"Google_Http_Request":private]=>
array(3) {
["Content-Type"]=>
string(16) "application/http"
["Content-Transfer-Encoding"]=>
string(6) "binary"
["MIME-Version"]=>
string(3) "1.0"
}
["queryParams":protected]=>
array(0) {
}
["requestMethod":protected]=>
string(4) "POST"
["requestHeaders":protected]=>
array(2) {
["content-type"]=>
string(31) "application/json; charset=UTF-8"
["authorization"]=>
string(183) "token_string"
}
["baseComponent":protected]=>
string(26) "https://www.googleapis.com"
["path":protected]=>
string(72) "/drive/v2/files/file_id/permissions"
["postBody":protected]=>
string(64) "{"role":"writer","type":"user","value":"user_email"}"
["userAgent":protected]=>
NULL
["canGzip":protected]=>
NULL
["responseHttpCode":protected]=>
NULL
["responseHeaders":protected]=>
NULL
["responseBody":protected]=>
NULL
["expectedClass":protected]=>
string(31) "Google_Service_Drive_Permission"
["expectedRaw":protected]=>
bool(false)
["accessKey"]=>
NULL
}
我觉得一切正常,正如我已经说过的,它适用于所有其他用户。我用 Postman 为同一个用户测试了这个调用,它给我带来了问题并且它有效,所以我的代码应该有问题。
现在我完全尴尬了。我没有正确验证用户电子邮件输入,所以它最后有一个 space 字符,这是唯一的问题。