Javascript google客户端api使用后端服务器进行身份验证不工作

Javascript google客户端api使用后端服务器进行身份验证不工作,javascript,php,google-app-engine,Javascript,Php,Google App Engine,尝试使用这个google客户端API示例 我通过javascript获取访问令牌,并通过ajax将其发布到我的PHP。下面是javascript对象 expires_at : 1490552860336 expires_in : 2223 first_issued_at : 1490549260336 id_token : "eyJhbGciOiJSUzI1NiIsImtpZCI6ImRkMDM4NzVmMzkzMTdiZThlNTc0MDBlNmMzMDYzMmFmNTU4YzJkZTQif

尝试使用这个google客户端API示例

我通过javascript获取访问令牌,并通过ajax将其发布到我的PHP。下面是javascript对象

expires_at
:
1490552860336
expires_in
:
2223
first_issued_at
:
1490549260336
id_token
:
"eyJhbGciOiJSUzI1NiIsImtpZCI6ImRkMDM4NzVmMzkzMTdiZThlNTc0MDBlNmMzMDYzMmFmNTU4YzJkZTQifQ.eyJhenAiOiI5Mjg3MzEzODM5NzQtc3RsdmFyc291cnZoNmdqaDdvbjkwZWwxOGhjOHVrNXYuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI5Mjg3MzEzODM5NzQtc3RsdmFyc291cnZoNmdqaDdvbjkwZWwxOGhjOHVrNXYuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTQ1MTMzNjU2ODMwMzExNzMwOTgiLCJlbWFpbCI6IndoeXRlYXZlbWVjaGFuaWNhbEBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiYXRfaGFzaCI6IkF2SUZQaHNjVmFNY1htTEdtand6M2ciLCJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiaWF0IjoxNDkwNTQ5MjU2LCJleHAiOjE0OTA1NTI4NTYsIm5hbWUiOiJUcmF2aXMgS2xlaW4iLCJwaWN0dXJlIjoiaHR0cHM6Ly9saDQuZ29vZ2xldXNlcmNvbnRlbnQuY29tLy1BdzlCUjF4YnVBNC9BQUFBQUFBQUFBSS9BQUFBQUFBQUFBQS9BTWNBWWk5b2ZNV1NtcllGc2pTc0xUcFpZZHhkT0FEaGZBL3M5Ni1jL3Bob3RvLmpwZyIsImdpdmVuX25hbWUiOiJUcmF2aXMiLCJmYW1pbHlfbmFtZSI6IktsZWluIiwibG9jYWxlIjoiZW4ifQ.PBcvfMs9_MO9mcHDtGGyb3VbO-O374tHH7w4gWr8ZMpRDYyynY6ZQd5BxRxlh6b__upzxz6gMYQ29yY__zDnEp4_NrkSp7RWQAcoF-JuY8xM1GtDy5IwEFKPxDh9h-9bGoxCx5jgX7-bu2F5Xk6opwZUzoyyYk5BT1xXpBfAe35CJHK_NAzSfrwEX8vU-hIP9C_BjipXptg5Eo3fi3DxPWRVbrzsscV0DDASm9xEi5ilLkUxBwRZN9bk6hgXXgn2Ts7Mo4B7Rue1oyB_rkNJ3RSgH7ylnHrVePiVwJ_15aKwiD64FgcmdLOruLEm9pADoiAodMVNZ6HAElr3MuWG1w"
idpId
:
"google"
login_hint
:
"AJDLj6JimYVJadfBfXai38izEPbdRaSSCtY5FyzYIVQ1IPE2kad13fq5-9Qwkik2AlWx3_Qlco531-R7LVEwcxvs8Xhw0TvrSg"
session_state
:
Object
token_type
:
"Bearer"
我的PHP如下

  require_once 'google-api-php-client-2.1.1/vendor/autoload.php';
            // Get $id_token via HTTPS POST.

            $client = new Google_Client(['client_id' =>'my google client id' ]);
            $payload = $client->verifyIdToken($this->input->post('id_token'));
            if ($payload) {
              $userid = $payload['sub'];
              // If request specified a G Suite domain:
              //$domain = $payload['hd'];
            } else {
              // Invalid ID token
            }
令人沮丧的是,我从来没有用过谷歌API的例子。我似乎在网上找不到任何东西可以让它正常工作。请帮帮我。我基本上是在寻找一个可以验证并保存在数据库中的id或令牌

我被这个函数卡住了

$payload = $client->verifyIdToken($this->input->post('id_token'));
屏幕截图显示了在抛出错误之前我能走多远

我最后走了这条路

  $q = 'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=' . $this->input->post('id_token');
            $json = file_get_contents($q);
            $userInfoArray = json_decode($json,true);
            $googleEmail = $userInfoArray['email'];
            $google_id= $userInfoArray['kid'];
我不确定孩子是否是用户的唯一id,但它会不断返回相同的值

成功了,谢谢, 这是我的

<?php
require_once 'google-api-php-client-2.2.0_PHP54/vendor/autoload.php';

// Get $id_token via HTTPS POST.
$id_token= $_POST['id_token'];
$CLIENT_ID = 'yourclientid......apps.googleusercontent.com';
$client = new Google_Client(['client_id' => $CLIENT_ID]);
$payload = 'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=' . $id_token;
        $json = file_get_contents($payload);
        $userInfoArray = json_decode($json,true);
        $googleEmail = $userInfoArray['email'];
        $google_id= $userInfoArray['sub'];

if ($googleEmail)
 {
  echo "validated".$googleEmail;
} else {
   echo "inValidate" ;
  }
?>


这真的是你的对象吗?不是这样的吗
{expires\u at:1490552860336,expires\u in:2223,first\u issued\u at:149054960336…}
注意括号和逗号,它只是对象中的信息这是一个有类似问题的人,我想你正在制作一个
新的Google\u客户端
实例,但你从未使用产生的
$Client
,这也使得您的
$CLIENT\u ID
未被使用。基本上,你只是在做一个请求,而没有使用谷歌客户端。