将Facebook登录添加到Flask-security

时间:2016-01-31 21:45:38

标签: facebook-oauth flask-security

我在添加"登录Facebook"时遇到问题我的Flask应用程序的功能已经使用Flask-Security进行用户身份验证。我真正想要的是除了登录表单之外的Facebook按钮,因此可以使用Facebook而不是邮件/密码。

我曾试图通过Facebook社交网站做到这一点,但失败了,我真的不懂文档。在我看来,用户必须在将帐户连接到Facebook之前进行注册,这不是我想要的方式。

那里有没有人完成了这项工作?在我看来,这将是一个常见的情况,但我在谷歌搜索时找不到任何有用的东西。

1 个答案:

答案 0 :(得分:2)

我做过类似的事情,虽然使用我们自己的SSO而不是Facebook,但原则是相同的。在我们的例子中,我们使用CAS,因此@login_required重定向到我们的CAS登录。成功登录后,我使用CAS用户名属性动态添加用户,然后通过Flask-Security登录。请注意,我的示例根据https://pythonhosted.org/Flask-Security/quickstart.html

对您的设置进行了假设
def add_user(username):
        if not user_datastore.find_user(username=username):
               user_datastore.create_user(**get_user_data(username))
               user_datastore.commit()
               db.session.commit()

def get_user_data(username):
        <Return dict mapping Facebook data to your user model>

def set_current_login(username):
        try:
               add_user(username)
               security.current_user = user_datastore.find_user(username=username)
        except Exception as e:
               print str(e)
               return False
        return True

@app.route('/')
@login_required
def index():
   set_current_login(<facebook username var>)

请注意,您也可以使用flask_security.utils.login_user()例程而不是设置current_user对象,该对象还将设置Flask-Security会话cookie。

请参阅https://pythonhosted.org/Flask-Security/api.html

上的API文档