Python 如何让Google的Oauth屏幕加载到Heroku上Flask应用程序的窗口中

Python 如何让Google的Oauth屏幕加载到Heroku上Flask应用程序的窗口中,python,flask,heroku,oauth-2.0,Python,Flask,Heroku,Oauth 2.0,我正在构建一个Python Flask应用程序,该应用程序收集有关用户的Google Tag Manager GTM帐户的一些信息。为此,我需要他们授权对其GTM帐户的只读访问,然后我去检索我需要的数据 这里的理想流程是: 用户点击登录谷歌 一个新的标签打开,要求他们选择他们的谷歌帐户 下一页将告诉他们我要查找的权限以及允许访问的权限 它们接受,验证流完成,选项卡关闭。 我已经设法让应用程序以所需的流量在本地运行,没有问题 然而,一旦我将它部署到Heroku,我就遇到了一个障碍,因为auth流根

我正在构建一个Python Flask应用程序,该应用程序收集有关用户的Google Tag Manager GTM帐户的一些信息。为此,我需要他们授权对其GTM帐户的只读访问,然后我去检索我需要的数据

这里的理想流程是:

用户点击登录谷歌 一个新的标签打开,要求他们选择他们的谷歌帐户 下一页将告诉他们我要查找的权限以及允许访问的权限 它们接受,验证流完成,选项卡关闭。 我已经设法让应用程序以所需的流量在本地运行,没有问题

然而,一旦我将它部署到Heroku,我就遇到了一个障碍,因为auth流根本不起作用。Heroku的日志如下:

If your browser is on a different machine then exit and re-run this
application with the command-line parameter
 --noauth_local_webserver
我挖了一点,添加了args.noauth_local_webserver=True作为Oauth流对象的参数

然而,这产生了一个新问题,在页面加载时,Heroku的日志中显示了这一点:

Go to the following link in your browser:
https://accounts.google.com/o/oauth2/auth?client_id=629932623162-nguh8ssud6her0e6bbc5vloe1k3aq95q.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Ftagmanager.readonly&access_type=offline&response_type=code&prompt=select_account
Enter verification code:
这在我的本地环境中起作用,因为我可以访问该页面并将验证代码粘贴到我的控制台中,但在Heroku上并不真正有用。我不确定我将把验证码粘贴到哪里,如果我以外的人要尝试登录,这肯定没有意义

有人知道如何让用户的web浏览器自动打开身份验证流,而不是让它显示在控制台中吗

如果有帮助的话,下面是我使用的从Google文档中提取的GetService函数:

def GetService():

# Parse command-line arguments.
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
   parents=[tools.argparser])

flags = parser.parse_args([])
flags.noauth_local_webserver = True

# Set up a Flow object to be used if we need to authenticate.
flow = client.flow_from_clientsecrets(
   client_secrets_path, scope=scope,
   prompt = 'consent', 
   message=tools.message_if_missing(client_secrets_path)) 
   storage = file.Storage(api_name + '.dat')

credentials = storage.get()
if credentials is None or credentials.invalid: 
    credentials = tools.run_flow(flow, storage, flags)
http = credentials.authorize(http=httplib2.Http())

# Build the service object.
service = build(api_name, api_version, http=http)

return service
然后,我使用如下调用从服务对象检索数据:

def retrieveAcctList():
    accountObj = GetService().accounts().list(
        access_token = token).execute()
这会触发本地计算机上的流

感谢您的帮助