2016-01-31 30 views
1

我在使用Flask-Security進行用戶身份驗證的Flask應用程序中添加「使用Facebook登錄」功能時遇到問題。我真正想要的是除登錄表單之外的Facebook按鈕,以便可以使用Facebook而不是郵件/密碼。將Facebook登錄添加到Flask-security

我試圖做到這一點Facebook的社會,但失敗了,我真的不明白文檔。在我看來,用戶必須在將帳戶連接到Facebook之前進行註冊,這不是我想要的方式。

有沒有人完成了這個?在我看來,這將是一個普遍的情況,但是當用谷歌搜索時,我找不到任何有用的信息。

回答

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對象,這也將創下瓶,安全會議曲奇餅。

請參閱API文檔https://pythonhosted.org/Flask-Security/api.html