Flask OAuth-Facebook MissingTokenError:(缺少_令牌)缺少访问令牌参数

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

我正在使用扩展名使用我的facebook帐户登录,该应用程序始终返回一个错误,显示:

oauthlib.oauth2.rfc6749.errors.MissingTokenError MissingTokenError:缺少\u令牌缺少访问令牌参数。

以下是我的配置:

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"))