8

如果我只想使用 Facebook 登录(例如,用户注册和登录,即没有本地注册/登录表单),是否可以使用 Flask-Social 和 Flask-Security?

我查看了 Flask-Social 示例应用程序和文档,但不知道这是否可行。在示例应用程序中,用户无法使用 Facebook 登录,除非他们之前已注册。在使用示例应用程序注册后,他们可以将他们的 Facebook 帐户与他们的本地帐户相关联。

当我尝试调用 social.facebook.get_connection() 时,我得到了一个,AttributeError 'AnonymousUser' object has no attribute 'id'因为没有current_user,这是注册/登录后由烧瓶安全定义的。

4

1 回答 1

5

@login_failed.connect_via使用装饰器不需要太多额外的工作就可以做到这一点。作为app您的 Flask 应用程序实例,它看起来像

@login_failed.connect_via(app):
def on_login_failed(sender, provider, oauth_response):
    connection_values = get_connection_values_from_oauth_response(provider, oauth_response)
    ds = current_app.security.datastore
    user = ds.create_user( ... ) #fill in relevant stuff here
    ds.commit()
    connection_values['user_id'] = user.id
    connect_handler(connection_values, provider)
    login_user(user)
    db.commit()
    return render_template('success.html')

至于填写创建用户的相关内容,我只是为密码创建了一个随机字符串,并且没有遇到让电子邮件为空的问题。我还在Flask-Social github 页面上包含了完全相同的答案。

于 2013-12-16T04:08:29.690 回答