Django OAuth2 Google无法在服务器上运行 [英] Django oauth2 google not working on server

查看:81
本文介绍了Django OAuth2 Google无法在服务器上运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用outh2进行身份验证.我需要Google日历v3 API.在本地主机上,一切正常.但是,当我在heroku服务器上发布它时,出现应用程序错误(基于错误代码是超时-30秒后).我已经创建了分离的Google项目(用于Google ID和秘密).

I'm using outh2 to authenticate. I need it for google calendar v3 api. On localhost everything works fine. But when I publish it on the heroku server I get Application Error (based on error code is timeout - after 30s). I have created separeted google project (for google id and secret).

这是我的代码

import gflags
import httplib2

from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run

FLAGS = gflags.FLAGS


def add_event(summary, location, dateTime_start, dateTime_end):

    # Set up a Flow object to be used if we need to authenticate. This
    # sample uses OAuth 2.0, and we set up the OAuth2WebServerFlow with
    # the information it needs to authenticate. Note that it is called
    # the Web Server Flow, but it can also handle the flow for native
    # applications
    # The client_id and client_secret are copied from the API Access tab on
    # the Google APIs Console
    FLOW = OAuth2WebServerFlow(
        client_id='##########################',
        client_secret='#######################',
        scope='https://www.googleapis.com/auth/calendar',
        user_agent='###########',
        #access_type='offline'
    )

    # To disable the local server feature, uncomment the following line:
    #FLAGS.auth_local_webserver = False

    # If the Credentials don't exist or are invalid, run through the native client
    # flow. The Storage object will ensure that if successful the good
    # Credentials will get written back to a file.
    storage = Storage('calendar.dat')
    credentials = storage.get()
    if credentials is None or credentials.invalid == True:
        credentials = run(FLOW, storage)

    # Create an httplib2.Http object to handle our HTTP requests and authorize it
    # with our good Credentials.
    http = httplib2.Http()
    http = credentials.authorize(http)

    # Build a service object for interacting with the API. Visit
    # the Google APIs Console
    # to get a developerKey for your own application.
    service = build(serviceName='calendar', version='v3', http=http,
                    developerKey='###########################')

    event = {
        'summary': summary,
        'location': location,
        'start': {
            'dateTime': dateTime_start,  # '2011-06-03T10:00:00.000-07:00',
            'timeZone': 'Europe/Ljubljana'
        },
        'end': {
            'dateTime': dateTime_end,   # '2011-06-03T10:25:00.000-07:00',
            'timeZone': 'Europe/Ljubljana'
        },
        }

    recurring_event = service.events().insert(calendarId='primary', body=event).execute()

    return recurring_event['id']

当我从本地主机上的视图调用add_event(摘要,位置,dateTime_start,dateTime_end)时,一切正常(身份验证流成功且事件已添加到我的日历中).但是在服务器上,我收到超时.

When I call add_event(summary, location, dateTime_start, dateTime_end) from my view on localhost everything works fine (authentication flow is succesfull and event is added to my calendar). But on server I receive timeout.

更新:

我可能应该以某种方式这样做..有什么想法吗?

I should probably do that somehow..any ideas?

Your browser has been opened to visit:

    https://accounts.google.com/o/oauth2/auth?scope=.....

If your browser is on a different machine then exit and re-run this

            --noauth_local_webserver

推荐答案

好像您的应用尝试在Heroku服务器上打开浏览器来执行OAuth2流程.这就解释了为什么它在服务器上而不是在您的计算机上失败.

Looks like your app tries to open a browser on Heroku server to do the OAuth2 flow. That explains why it fails on server, but not on your machine.

我建议您与add_event分开实现OAuth2集成,而不是使用oauth2client.tools.run.

Instead of using oauth2client.tools.run, I'd suggest you implement your OAuth2 integration seperately from add_event.

这篇关于Django OAuth2 Google无法在服务器上运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆