python - flask /Facebook : Flask-Oauth OAuthException: Missing redirect_uri parameter?

标签 python facebook oauth flask

我有一个 Flask 应用程序,我正在尝试使用 Facebook 进行身份验证。在本地,它工作得很好。当我部署到 Heroku 时,它不起作用,并抛出以下错误:

{u'error': {u'type': u'OAuthException', u'message': u'Missing redirect_uri parameter.', u'code': 191}}

'Invalid response from facebook'

我已经在整个 stackoverflow 和 google 上搜索了这个问题的答案,但我似乎无法弄明白。

我特别困惑为什么它在本地工作而不是部署。

至于我的实现,一字不差:

facebook = oauth.remote_app('facebook',
    base_url='https://graph.facebook.com/',
    request_token_url=None,
    access_token_url='/oauth/access_token',
    authorize_url='https://www.facebook.com/dialog/oauth',
    consumer_key=FACEBOOK_APP_ID,
    consumer_secret=FACEBOOK_APP_SECRET,
    request_token_params={'scope':'email,user_birthday,user_education_history,user_photos,publish_actions'}
    )

@app.route('/login')
def login():
    return facebook.authorize(callback=url_for('facebook_authorized',
        next=request.args.get('next') or request.referrer or None,
        _external=True))

@app.route('/login/authorized')
@facebook.authorized_handler
def facebook_authorized(resp):
    if resp is None:
        error = 'Access denied: reason=%s error=%s' %(
            request.args['error_reason'],
            request.args['error_descriptions']
        )
        return render_template('home.html', error=error)
    xyz = (resp['access_token'], '')
    session['oauth_token'] = xyz
    me = facebook.get('/me')
    checkUser = db.session.query(User).filter(User.fid==me.data['id']).all()
    if not checkUser:
        fname = me.data['name'].split()[0]
        lname = me.data['name'].split()[-1]
        education=''
        if 'education' in me.data:
            education=me.data['education'][-1]['school']['name']
        newuser = User(me.data['id'], fname, lname, me.data['email'], me.data['username'], education)
        db.session.add(newuser)
        db.session.commit()
    flash('You were logged in')
    session['fid'] = me.data['id']
    return redirect(url_for('home'))

@facebook.tokengetter
def get_facebook_oauth_token():
    return session.get('oauth_token')

有人知道吗?

最佳答案

尝试使您的回调 URL 成为带有域等的完整 url。如果您在本地工作,则可以使用 localhost,但如果您不在 80 上,请指定端口。

关于python - flask /Facebook : Flask-Oauth OAuthException: Missing redirect_uri parameter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14543357/

相关文章:

python - Django - 用户在注销后通过单击浏览器后退按钮重新进入 session

python - 按值和计数聚合,不同数组

java - 无法在restfb中获得类似的计数

Facebook:获取访问 token 以作为页面发布

c# - 无法从 Google OAuth2 token 端点获取访问 token

rest - 尝试授权用户并获取 token 时突然出现 Instagram API "SCOPE"问题 - OAuth

Python:select() 不会发出来自管道的所有输入信号

python - 从 xarray DataArray 中删除坐标

testing - 是否有可用的测试站点,我们可以在其中测试我们的 OAuth 1.0a 签名?

ios - 如何将 facebook 注销按钮移动到其他导航/ View Controller 包?