Flask_login.current_user.is_authenticated vs Flask-dance fac



我正在尝试构建一个简单的原型,该原型将具有登录/密码身份验证和OAuth2身份验证,后者使用Flask-Dance。那么,将current_user.is_authenticatedfacebook.authorized相结合的最佳实践是什么?

我正在努力编写登录和注销的正确逻辑。到目前为止,我的代码如下所示:

@app.route('/logout')
def logout():
    logout_user()
    return redirect(url_for('index'))

@app.route("/")
def index():
    if current_user.is_authenticated and facebook.authorized: # here is the problem
        me = facebook.get('me?fields=id,first_name,email').json()
        social_id, username, email = me['id'], me['first_name'], me['email']
        user = User.query.filter_by(social_id=social_id).first()
        if not user:
            user = User(social_id=social_id, nickname=username, email=email)
            db.session.add(user)
            db.session.commit()
        login_user(user, True)
    return render_template('index.html')

如您所见,一旦用户注销,她就无法重新登录。但是,如果我从if中删除current_user.is_authenticated,那么即使用户单击注销链接,她也会保持登录状态。

我认为 index 函数不是处理 Facebook 登录的合适位置,我应该以某种方式挂钩执行 OAuth 舞蹈的实际方法,但我需要有关如何执行此操作的提示,而无需投入修改 Flask-Dance 代码......

我是Flask-Dance的作者。查看多用户设置的文档,查看如何在用户登录过程中挂接到此oauth_authorized信号的示例。

在 GitHub 上提出问题后,我将在此处发布作者的回应:

你和我都无法控制Facebook选择如何实现OAuth,如果用户在授权步骤中单击"取消",它可能会选择给你一个没有权限的OAuth令牌。您可以使用oauth_authorized信号进行检查,如下所述:http://flask-dance.readthedocs.io/en/latest/signals.html

最新更新