Google App Engine app_identity_defaultcredentialsbased_stub.py为token.expires_in错误返回'NoneType'

时间:2018-03-08 18:22:26

标签: python google-app-engine google-cloud-storage

我使用Google App Engine遇到了一个相当奇怪的问题。在尝试使用GetAccessToken授权我的应用程序标识时,我不断收到错误:

    ERROR    2018-03-08 18:14:42,472 api_server.py:364] Exception while handling app_identity_service.GetAccessToken()
Traceback (most recent call last):
  File "/usr/lib64/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/api_server.py", line 332, in _handle_POST
    api_response = _execute_request(request).Encode()
  File "/usr/lib64/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/api_server.py", line 188, in _execute_request
    make_request()
  File "/usr/lib64/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/api_server.py", line 183, in make_request
    request_id)
  File "/usr/lib64/google-cloud-sdk/platform/google_appengine/google/appengine/api/apiproxy_stub.py", line 151, in MakeSyncCall
    method(request, response)
  File "/usr/lib64/google-cloud-sdk/platform/google_appengine/google/appengine/api/app_identity/app_identity_defaultcredentialsbased_stub.py", line 200, in _Dynamic_GetAccessToken
    'expires': now + token.expires_in,
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

从我所看到的情况来看,Google正试图连接'now'这是一个整数,'token.expires_in'也应该是一个整数,而是作为'NoneType'对象返回。我出于特定原因在此项目中使用Python 2.7,并且完全了解Google Cloud SDK。任何帮助将不胜感激。

谢谢! -Josh Jackson

1 个答案:

答案 0 :(得分:0)

我已经查看了Python中使用的get_access_token方法的源代码(可以检查here),并且没有对名为expires_in的方法返回的任何对象的引用。但是,正如您在代码中看到的,它返回expires_at

Python将expires_in识别为NoneType,因为在令牌中没有任何对象被命名。每当您致电token.expires_in时,请将其更改为token.expires_at并再次测试。