Gmail API:如何获取访问令牌?

4

我正在测试Gmail API

到目前为止,我已经完成了以下步骤:

现在当我运行文件“quickstart.php”时,会出现一个链接。当我打开它时,会出现一个授权页面,在该页面上,我授权我的应用程序访问Gmail API。

然后它将重定向到我在设置中声明的Redirect URIs(添加代码参数)。

地址栏中正好出现这个:

http://localhost/main/gmail_callback?code=MY_CODE

其中main是我的控制器,gmail_callback到目前为止只是一个空函数。

这应该是正确的,因为这些是我的设置:

  • Javascript来源:http://localhost
  • 重定向URI:http://localhost/main/gmail_callback

接下来我该怎么做?


应包含您对身份验证流程的处理。 - Linda Lawton - DaImTo
那是什么?你能举个例子吗? - FrancescoMussi
但是你所需要的大部分内容都在你链接的页面中,quickstart.php包含身份验证信息。 - Linda Lawton - DaImTo
3个回答

2
流程的下一步是将授权码交换为访问令牌(如果您请求了离线访问,则还包括刷新令牌)。如果您使用https://developers.google.com/oauthplayground/手动执行流程,您将能够看到涉及的URL。有一个PHP库可用于执行相同的操作,但我个人更喜欢发送自己的HTTP而不是使用库。即使您使用库,花点时间了解HTTP流程仍然是值得的,这样您就可以更轻松地调试遇到的任何问题。

谢谢,我现在更好地理解它的工作原理了。我已经选择并授权了Gmail API,交换授权码以获取访问令牌。然后我发送了一个请求来获取消息,并获得了JSON格式的消息列表。看起来一切都很好。所以如果我正确理解,我也需要在我的应用程序中交换授权码以获取访问令牌。这就是我缺少的。但是如何在我的应用程序中完成呢?谢谢! - FrancescoMussi
这是针对每个用户访问自己的Gmail,还是只是一次性访问中央账户? - pinoyyid
我认为这是访问中央账户的方法。 - FrancescoMussi
如果只是为了单个中央账户进行一次性操作,实际上可以在Oauth Playground中完成整个过程,而无需编写任何代码。请参见https://dev59.com/AWIj5IYBdhLWcg3w6JHU?s=8|2.2789。 - pinoyyid

1

0

几个月前,我制作了一个Oauth Gmail,我得到了类似于这样的东西:

在我的回调函数中:

if (! isset($_GET['code'])) {
  $auth_url = $client->createAuthUrl();
  return $this->redirect($auth_url);
} else {
  $client->authenticate($_GET['code']);
  $_SESSION['access_token'] = $client->getAccessToken();
  $redirect_uri = Router::url('/', true).'Users/gmail';
  return $this->redirect($redirect_uri);
}

在我的gmail()函数中:
public function gmail(){ 
    require APPLIBS.'Google/src/Google'.DS.'autoload.php';
    $client = new Google_Client();
    $client->setAuthConfigFile('../Config/client_secrets.json');
    $client->addScope(Google_Service_Oauth2::PLUS_LOGIN);
    $client->addScope(Google_Service_Oauth2::USERINFO_EMAIL);
    if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
        $client->setAccessToken($_SESSION['access_token']);
        $oauth_service = new Google_Service_Oauth2($client);
        $data['Profile']['last_name']  = $oauth_service->userinfo->get()->familyName; 
    } 
} 

$data['Profile']['last_name'] 包含用户的姓氏,例如。


感谢回复。在回调函数中只有那个代码吗? 你的gmail()函数是用来发送请求到API的吗?(例如如果你想要得到消息) - FrancescoMussi
不,有这个:public function oauthgmail2callback(){ // 回调 require APPLIBS.'Google/src/Google'.DS.'autoload.php'; $client = new Google_Client(); $client->setAuthConfigFile('../Config/client_secrets.json'); $gmailredirecturi = Router::url('/', true).'Users/oauthgmail2callback'; $client->setRedirectUri($gmailredirecturi); $client->addScope(Google_Service_Oauth2::PLUS_LOGIN); $client->addScope(Google_Service_Oauth2::USERINFO_EMAIL); $client->setAccessType('online'); - TiDJ
是的,例如 $data['Profile']['last_name'] 值等等。根据您要查找的内容,取决于您的 $client->addScope / 授权。 - TiDJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接