Flask/Facebook: Flask-Oauth OAuthException: 缺少 redirect_uri 参数?
我有一个Flask应用程序,我正在尝试用Facebook进行身份验证。在本地运行时,一切都很好。但是当我把它部署到Heroku上时,就出问题了,出现了以下错误:
{u'error': {u'type': u'OAuthException', u'message': u'Missing redirect_uri parameter.', u'code': 191}}
'Invalid response from facebook'
我在StackOverflow和谷歌上到处搜索这个问题的答案,但我就是搞不明白。
我特别困惑的是,为什么在本地可以正常工作,而部署后就不行了。
至于我的实现,完全按照说明来做的:
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')
有没有人能给点线索?
1 个回答
1
试着把你的回调网址写成一个完整的网址,包括域名等等。如果你是在本地开发,可以用localhost,但如果不是在80端口上,就要指定端口号。