Getting 'Refreshing due to a 401' when trying to connect using remote_api

扶醉桌前 提交于 2019-12-12 11:47:15

问题


I am trying to connect to the production datastore running on Google App Engine based on https://cloud.google.com/appengine/docs/python/tools/remoteapi#enabling_remote_api_access_in_your_app and AppEngine - Remote API returning 401 and too-many-auth and GAE: remote_api and Application Default Credentials and others.

This is my code to connect to Google App Engine Datastore

try:
    import dev_appserver
    dev_appserver.fix_sys_path()
except ImportError:
    print('Please make sure the App Engine SDK is in your PYTHONPATH.')
    raise

from google.appengine.ext.remote_api import remote_api_stub
import os

class RemoteApi:
    @staticmethod
    def use_remote_datastore():
        os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "my-appengine-default-service-account.json"
        project_id = 'myapp'
        project_address = '{}.appspot.com'.format(project_id)
        RemoteApi.connect2(project_address)

    @staticmethod
    def auth_func2():
        return ('myuser@myemail.com','mypassword')

    @staticmethod
    def connect2(project_address):
            remote_api_stub.ConfigureRemoteApiForOAuth(
            project_address,
            '/_ah/remote_api', secure=True)

But I am getting the error

NotSupportedOnThisPlatform

If I then set

secure=False

I then get

 INFO     2016-10-01 23:35:32,727 client.py:546] Attempting refresh to obtain initial access_token
....
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/dummy_thread.py", line 73, in allocate_lock
return LockType()
RuntimeError: maximum recursion depth exceeded

I tried running

gcloud auth login

and creating a new service account which are both suggested here AppEngine - Remote API returning 401 and too-many-auth

Any ideas what I am doing wrong?


回答1:


You have mentioned auth_func2 but have not used it, according to remote_api updates without this information everytime with the oauth request, a connection is not possible.

change your connect2 method and try this -

@staticmethod
def connect2(project_address):
    remote_api_stub.ConfigureRemoteApi(None, '/_ah/remote_api', auth_func2, project_address)

P.S - I am assuming your project_address is right and without 'http://'



来源:https://stackoverflow.com/questions/39812525/getting-refreshing-due-to-a-401-when-trying-to-connect-using-remote-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!