我是Google日历API(PHP/MMySQL和codeigniter 3(的新手。我想设置日历的双向同步。
我设法授权恢复事件,还可以修改、删除和添加新事件。
但过了一段时间,我的token_access不再有效。如何使我的应用程序不需要在每次启动时重新连接谷歌帐户?我想我还不太清楚这条规则是如何运作的。
我以本教程为基础https://techarise.com/integrate-google-calendar-api-with-codeigniter-calendar-library/
你能在这个问题上启发我吗?
非常感谢
但过了一段时间,我的token_access不再有效。
这很正常,没有办法阻止您连接到谷歌获取凭据。
您实际上需要做的是刷新您的令牌,这样您就不需要获得一个全新的Authorization code
。
如果你想要更详细的解释来了解OAuth2工作流在谷歌中的工作原理,我建议你阅读官方文档中的此页面。如果你想阅读OAuth2的整个RFC,你也可以这样做。
尽管我强烈建议在OAuth2 Playground中使用和测试,以了解刷新令牌所需的实际HTTP请求是什么。
TL;DR:访问令牌在创建后过期,这是意料之中的事。您需要使用刷新令牌来获取新的访问令牌。
感谢您的回答。这让我可以写这个工作代码!无论是电脑还是移动客户端,我的帐户都会自动连接,而无需经过同意屏幕。双向同步是正确的。非常感谢
public function getClientGoogle(){
if($this->dataUserCal->google_calendar == 'Oui'){
if ($this->googleapi->isAccessTokenExpired()) {
$this->googleapi->setAccessToken(json_decode($this->dataUserCal->data_token_google,true));
$r = $this->googleapi->getRefreshToken();
$token = $this->googleapi->fetchAccessTokenWithRefreshToken($this->googleapi->getRefreshToken());
$this->tokenAccessGoogle = $token['access_token'];
$this->db->set('access_key_google', $token['access_token']);
$this->db->set('data_token_google', json_encode($token));
$this->db->set('date_access_key_google',date('Y-m-d H:i:s'));
$this->db->where('id', $this->session->userdata('id_user'));
$this->db->update('users');
} else {
$this->tokenAccessGoogle = $this->dataUserCal->access_key_google;
}
}
}