Flask_login.current_user.is_authenticated vs Flask-dance facebook.authorized

时间:2017-01-21 09:30:26

标签: python facebook flask flask-login

我正在尝试构建一个具有登录/密码身份验证和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')

正如您所看到的,一旦用户退出,她就无法重新登录。但是,如果我从current_user.is_authenticated删除if,则用户将保持登录状态甚至在她点击退出链接后。

我认为index功能不是处理Facebook登录的正确位置,我应该以某种方式勾选OAuth舞蹈的实际方法,但我需要提示如何做这不需要修改Flask-Dance代码...

2 个答案:

答案 0 :(得分:2)

我是Flask-Dance的作者。检查documentation for multi-user setups,以查看在用户登录过程中如何挂接到此oauth_authorized信号的示例。

答案 1 :(得分:0)

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

  

您和我都无法控制Facebook选择如何实施OAuth,如果用户点击"取消"它可能会选择为您提供无权限的OAuth令牌。在授权步骤中。您可以使用oauth_authorized信号检查此信息,如下所示:http://flask-dance.readthedocs.io/en/latest/signals.html