我正在使用一个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.
因此,如果我正确阅读了此内容,客户端将自动刷新访问令牌,而无需执行任何操作?
使用Google客户端执行所有操作后,当我使用 $ this-> client-> getaccessToken()时,访问令牌不存在。如果我使用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 。谁能给我一个提示?