Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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
Python 如何避免';检索访问令牌失败:{quot;error";:“invalid_grant";}';在离线GAE cron任务中?_Python_Google App Engine_Google Api_Oauth 2.0_Google Api Python Client - Fatal编程技术网

Python 如何避免';检索访问令牌失败:{quot;error";:“invalid_grant";}';在离线GAE cron任务中?

Python 如何避免';检索访问令牌失败:{quot;error";:“invalid_grant";}';在离线GAE cron任务中?,python,google-app-engine,google-api,oauth-2.0,google-api-python-client,Python,Google App Engine,Google Api,Oauth 2.0,Google Api Python Client,这篇文章是一篇后续文章。http=credentials.authorize(httplib2.http())部分在测试时不再失败,但在GAE的cron运行时似乎仍然失败,因为它无法刷新我的access\u令牌: 我可以通过调用/fetch手动运行我的作业,比如在11:45 立即在11:55调度/cronfetch作业,然后,无任何访问令牌问题 但是,今天早上醒来时,我发现相同的/cronfetch任务(除了计时之外,时间相同,对于我的非测试日常任务,时间是01:00)失败了: → 为什么cro

这篇文章是一篇后续文章。
http=credentials.authorize(httplib2.http())
部分在测试时不再失败,但在GAE的cron运行时似乎仍然失败,因为它无法刷新我的
access\u令牌

  • 我可以通过调用
    /fetch
    手动运行我的作业,比如在11:45
  • 立即在11:55调度
    /cronfetch
    作业,然后
    ,无任何
    访问令牌问题
  • 但是,今天早上醒来时,我发现相同的
    /cronfetch
    任务(除了计时之外,时间相同,对于我的非测试日常任务,时间是01:00)失败了:

    → 为什么cron作业在手动运行5分钟后工作,但在6小时后失败?我以为刷新令牌从未过期。我做错了什么

    请注意,这是我的第一个GAE工作,也是我的第二个Python程序,非常欢迎您提供一般代码审查/建议,但请温和:)


    代码已打开,可以在访问我的实例。谢谢你的帮助

    当刷新令牌无法用于从当前用户获取新的访问令牌时,将返回
    无效的\u授权。发生这种情况是因为存储的
    凭据
    对象具有空刷新令牌,即

    >>> credentials.refresh_token is None
    True
    
    如中的注释所述:

    如果用户已经授权了您的客户机ID,那么在随后为这些用户执行OAuth时,他们将不会看到OAuth对话框,也不会向您提供刷新令牌


    您需要确保您的
    凭证
    存储在有效的刷新令牌中,并且最简单的方法是在创建
    OAuth2WebServerFlow
    OAuth2Decorator
    对象时使用
    approval\u prompt=force
    (以您使用的为准).

    好吧,我想我不需要这个,因为我的cron任务只工作过一次!同一个cron任务怎么能在手动任务完成几分钟后工作,但6小时后失败?还有第二个问题:因为我使用的是
    OAuth2DecoratorFromClientSecrets
    ,它不会将额外的
    **kwargs
    转发给
    OAuth2Decorator
    ,你怎么办您建议设置附加的
    approval\u prompt=force
    参数吗?是否必须在初始化时执行此操作,或者如果创建我的
    decorator=OAuth2DecoratorFromClientSecrets…
    并执行
    decorator.params.update({approval\u prompt='force'),是否可以
    之后?谢谢。当
    凭据时,cron任务将工作。access\u token
    有效,但access token将在1小时后过期。过期后,
    凭据。需要刷新\u token
    以获取新的访问令牌。您可能需要
    装饰程序.params.update({approval\u prompt':'force})
    但是没有充分的理由不将其传递给构造函数。好的,我不知道1小时的限制,谢谢。关于“没有充分的理由不将其传递给构造函数”,我很想!但是
    OAuth2DecoratorFromClientSecrets
    似乎不尊重/转发额外的
    **kwargs
    (这是我从源代码中了解到的,如果我尝试,它会引发异常),这就是我的问题。我遗漏了什么吗?是的,我不能评论使用
    OAuth2DecoratorFromClientSecrets
    ,因为我没有使用它,但如果你只是使用
    OAuth2Decorator
    你就没有问题了。在那一个上选择你的毒药。即使在之后,我仍然会得到一个
    无效的\u grant
    错误。我的测试场景:1.手动测试(
    /fetch
    ,有效),2.70分钟的等待,3.cron运行(
    /cronfetch
    ,返回
    无效授权
    错误)。你知道吗?
        ...
        E 2013-06-10 08:26:12.817 http://www.onedayonemusic.com/page/2/ : found embeds ['80wWl_s-HuQ', 'kb1Nu75l1vA', 'kb1Nu75l1vA', 'RTWcNRQtkwE', 'RTWcNRQtkwE', 'ZtDXezAhes8', 'ZtDXezAhes8', 'cFGxNJhKK9c', 'cFGxNJhKK9c'
        I 2013-06-10 08:26:14.019 make: Got type <class 'google.appengine.api.datastore_types.Blob'>
        I 2013-06-10 08:26:14.020 validate: Got type <class 'oauth2client.client.OAuth2Credentials'>
        I 2013-06-10 08:26:14.022 URL being requested: https://www.googleapis.com/youtube/v3/playlists?alt=json&part=snippet%2Cstatus
        I 2013-06-10 08:26:14.100 Refreshing due to a 401
        I 2013-06-10 08:26:14.105 make: Got type <class 'google.appengine.api.datastore_types.Blob'>
        I 2013-06-10 08:26:14.106 validate: Got type <class 'oauth2client.client.OAuth2Credentials'>
        I 2013-06-10 08:26:14.106 Refreshing access_token
        E 2013-06-10 08:26:18.994 Deadline exceeded while waiting for HTTP response from URL: https://accounts.google.com/o/oauth2/token Traceback (most recent call last): File "/pyt
        E 2013-06-10 08:26:18.996 http://www.onedayonemusic.com/page/3/ : found embeds ['80wWl_s-HuQ', '6VNu2MLdE0c', '6VNu2MLdE0c', 'YwQilKbK9Mk', 'YwQilKbK9Mk', 'KYdB3rectmc', 'KYdB3
        E 2013-06-10 08:26:18.996 crawl_videos end
        E 2013-06-10 08:26:18.996 create_playlist start
        E 2013-06-10 08:26:18.996 create_playlist got creds
        E 2013-06-10 08:26:18.996 create_playlist authorized creds
    
    >>> credentials.refresh_token is None
    True