Flask OAuth-Facebook MissingTokenError:(缺少_令牌)缺少访问令牌参数
我正在使用扩展名使用我的facebook帐户登录,该应用程序始终返回一个错误,显示: oauthlib.oauth2.rfc6749.errors.MissingTokenError MissingTokenError:缺少\u令牌缺少访问令牌参数。 以下是我的配置:Flask OAuth-Facebook MissingTokenError:(缺少_令牌)缺少访问令牌参数,flask,oauth,Flask,Oauth,我正在使用扩展名使用我的facebook帐户登录,该应用程序始终返回一个错误,显示: oauthlib.oauth2.rfc6749.errors.MissingTokenError MissingTokenError:缺少\u令牌缺少访问令牌参数。 以下是我的配置: from flask_dance.consumer.backend.sqla import SQLAlchemyBackend from flask_dance.contrib.facebook import make_fac
from flask_dance.consumer.backend.sqla import SQLAlchemyBackend
from flask_dance.contrib.facebook import make_facebook_blueprint
facebook_blueprint = make_facebook_blueprint(
client_id=app.config['FACEBOOK_CLIENT_ID'],
client_secret=app.config['FACEBOOK_CLIENT_SECRET'],
scope=["public_profile"]
)
app.register_blueprint(facebook_blueprint)
@oauth_authorized.connect_via(facebook_blueprint)
def facebook_logged_in(blueprint, token):
resp = blueprint.session.get('me?fields={fields}'.format(fields='id,email,picture,first_name,last_name,verified'))
if resp.ok:
account_info_json = resp.json()
email = account_info_json['email']
query = User.query.filter_by(email=email)
try:
user = query.one()
user.image = account_info_json['picture']['data']['url']
db.session.commit()
except NoResultFound:
user = User()
user.image = account_info_json['picture']['data']['url']
user.fullname = account_info_json['name']
user.username = account_info_json['name']
user.email = email
if account_info_json['verified'] == True:
user.active = True
user.confirmed = True
user.subscribed = True
default_role = Role.query.filter_by(name="default").first()
user.roles.append(default_role)
db.session.add(user)
db.session.commit()
login_user(user, remember=True)
identity_changed.send(
current_app._get_current_object(),
identity=Identity(user.id)
)
facebook_blueprint.backend = SQLAlchemyBackend(OAuth, db.session, user=current_user)
在url中,我可以看到应用程序返回的令牌,该令牌位于代码参数之后,如下所示:
以下是扩展的版本:
oauthlib==3.0.0
Flask_Dance==1.2.0
回调函数:
@oauth_blueprint.route("/facebook")
def facebook_login():
if not facebook.authorized:
return redirect(url_for("facebook.login"))
if facebook.authorized:
next = request.url
if next is not None:
return redirect(request.args.get('next') or url_for('home.index'))
return redirect(url_for("facebook.login"))
contrib/facebook.py:
该问题是由于库需要Python 3 Unicode字符串引起的
解决方案是在客户端ID和客户端机密字符串之前添加u,以使字符串采用Unicode编码。显示您在哪里处理回调,ACCESS\u TOKENQuestion更新。1您在哪里使用facebook\u oauth?2 facebook_bp.session.auth包含哪些内容?3你在哪里调用set_applocal_session 4哪行代码生成oauthlib.oauth2.rfc6749.errors.MissingTokenError?1它包含facebook_bp.session对象2 None 3在第一个应用程序请求之前4真正让人感到奇怪的是,我有另一个应用程序使用相同的配置,但不同的oauth facebook应用程序,它可以工作太完美了!!!!
from __future__ import unicode_literals
from flask_dance.consumer import OAuth2ConsumerBlueprint
from functools import partial
from flask.globals import LocalProxy, _lookup_app_object
try:
from flask import _app_ctx_stack as stack
except ImportError:
from flask import _request_ctx_stack as stack
def make_facebook_blueprint(
client_id=None, client_secret=None, scope=None, redirect_url=None,
redirect_to=None, login_url=None, authorized_url=None,
session_class=None, backend=None):
facebook_bp = OAuth2ConsumerBlueprint("facebook", __name__,
client_id=client_id,
client_secret=client_secret,
scope=scope,
base_url='https://graph.facebook.com/v{version}/'.format(version='3.0'),
authorization_url='https://www.facebook.com/v{version}/dialog/oauth'.format(version='3.0'),
token_url='https://graph.facebook.com/v{version}/oauth/access_token'.format(version='3.0'),
redirect_url= redirect_url,
redirect_to=redirect_to,
login_url=login_url,
authorized_url=authorized_url,
session_class=session_class,
backend=backend,
)
facebook_bp.from_config["client_id"] = "FACEBOOK_OAUTH_CLIENT_ID"
facebook_bp.from_config["client_secret"] = "FACEBOOK_OAUTH_CLIENT_SECRET"
@facebook_bp.before_app_request
def set_applocal_session():
ctx = stack.top
ctx.facebook_oauth = facebook_bp.session
return facebook_bp
facebook = LocalProxy(partial(_lookup_app_object, "facebook_oauth"))