Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Google Plus API-无法在特定日期之前处理令牌_Php_Oauth_Google Api_Google Plus_Google Oauth - Fatal编程技术网

Php Google Plus API-无法在特定日期之前处理令牌

Php Google Plus API-无法在特定日期之前处理令牌,php,oauth,google-api,google-plus,google-oauth,Php,Oauth,Google Api,Google Plus,Google Oauth,我使用GooglePlus API实现了登录功能。在我们移动部署时区之前,一切正常。尽管服务器时间已正确调整,但以下问题仍不时出现: 无法在2018-02-01T06:30:07+0000之前处理令牌 这是用PHP实现的,并使用Google Plus的SDK。以前是否有人遇到过此问题并正确解决了此问题?当服务器时钟比Auth servers时钟晚几秒时,会出现此错误。您可能在生成令牌的服务器上的时钟与验证令牌的服务器上的时钟之间有一个微小的差异。如果iat或nbf是将来的,则令牌尚未有效 一种解

我使用GooglePlus API实现了登录功能。在我们移动部署时区之前,一切正常。尽管服务器时间已正确调整,但以下问题仍不时出现:

无法在2018-02-01T06:30:07+0000之前处理令牌


这是用PHP实现的,并使用Google Plus的SDK。以前是否有人遇到过此问题并正确解决了此问题?

当服务器时钟比Auth servers时钟晚几秒时,会出现此错误。您可能在生成令牌的服务器上的时钟与验证令牌的服务器上的时钟之间有一个微小的差异。如果iat或nbf是将来的,则令牌尚未有效

一种解决方案是使用一个小的回旋余地,如下所示:

JWT::$leeway=5;//允许对正时检查有5秒的公差


见问题

这对我也很有效。我必须进入composer在
vendor\google\apiclient\src\google\AccessToken\Verify.php中为我生成的vendor文件夹
,并查找一个函数
getJwtService()
,该函数应该与此完全相同

    private function getJwtService()
  {
    $jwtClass = 'JWT';
    if (class_exists('\Firebase\JWT\JWT')) {
      $jwtClass = 'Firebase\JWT\JWT';
    }

    if (property_exists($jwtClass, 'leeway')) {
      // adds 1 second to JWT leeway
      // @see https://github.com/google/google-api-php-client/issues/827
      $jwtClass::$leeway += 1;
    }

    return new $jwtClass;
  }

然后我更改了
$jwtClass::$leeway+=1的值
$jwtClass::$leeway+=200由于我的时区。我落后了大约2分30秒。请注意,这会带来安全漏洞。

虽然richard4s提供的答案很好,但编辑供应商目录中的文件不是一个好的做法,因为它们是由composer创建的,通常位于项目的Git/Svn repo之外。
Google\u客户端
接受自定义jwt对象作为其构造函数的参数。所以这里有一个合适的方法来解决这个问题:

$jwt = new \Firebase\JWT\JWT;
$jwt::$leeway = 5; // adjust this value

// we explicitly pass jwt object whose leeway is set to 5
$this->client = new \Google_Client(['jwt' => $jwt]);

抄袭自文章。

你到底在哪里找到这个?你从哪个时区搬来to@DalmTo墨西哥城我也看到了这个解决方案,但大家普遍担心的是,这是一个根本不应该解决的问题。另一个选择是修复服务器,使其具有正确的时间。它需要与NTP同步,但是时钟偏移是一个已知的问题,这就是为什么我们有能力解决这个问题。我不认为这是一个解决办法。问题是,服务器已经有了正确的时间。我想知道2018-02-01T06:30:07+0000来自哪里。我真的不能告诉你。您可以尝试在库的github问题表单上发布问题。或者,您可以下载完整的源代码,并按照自己的方式进行调试。