【发布时间】:2020-08-21 03:13:32
【问题描述】:
我正在开发一个 PHP Web 应用程序,该应用程序在用户获得授权后创建 Google 联系人。我不想每次创建新联系人时都提示用户,所以我发现了这个:https://developers.google.com/identity/protocols/oauth2/web-server#offline
If your application needs offline access to a Google API, set the API client's access type to offline:
$client->setAccessType("offline");
After a user grants offline access to the requested scopes, you can continue to use the API client to access Google APIs on the user's behalf when the user is offline. The client object will refresh the access token as needed.
所以如果我正确阅读了这个,客户端会自动刷新访问令牌而不需要我做任何事情?
当我使用 $this->client->getAccessToken() 时,使用 Google 客户端执行所有操作后访问令牌不存在。如果我 var_dump 它总是会显示为 NULL。 我应该怎么做才能让客户端自动刷新访问令牌??这是我的代码的完整性,你会发现它并不太复杂
我的模型
class PeopleModel{
protected $client;
public function __construct(){
$this->client = new Google_Client();
$this->client->setAuthConfig('credentials.json');
$this->client->setScopes(Google_Service_PeopleService::CONTACTS);
$this->client->setRedirectUri('my url');
$this->client->setAccessType('offline');
$this->client->setPrompt('consent');
$this->client->setApprovalPrompt('auto');
$this->client->setIncludeGrantedScopes(true);
}
public function getClient(){
return $this->client;
}
}
我的控制器
class GooglePeople extends Controller{
protected $client;
public function __construct(){
$this->client = new PeopleModel();
$this->client = $this->client->getClient();
// we get code from the google auth page
if( isset($_GET['code']) ){
$token = $this->client->fetchAccessTokenWithAuthCode($_GET['code']);
$acc_token = $this->client->getAccessToken();
$this->client->setAccessToken($acc_token);
}
}
public function index(){
// we get code from the google auth page or the client as an acc token
if (isset($_GET['code']) || $this->client->getAccessToken()) {
// ... Do stuff with the PeopleService. So far no errors here
}else{ // we redirect to google auth page to get auth code
$auth_url = $this->client->createAuthUrl();
if(!header('Location: '.filter_var($auth_url,FILTER_SANITIZE_URL))){
exit('Header error');
}
}
}
}
我每次都被重定向,因为 $this->client->getAccessToken() 为 NULL。谁能给个提示??
【问题讨论】:
标签: php oauth-2.0 google-oauth google-api-php-client google-client