2013-08-01 5 views
7

是否有可能使用瓶,社會和燒瓶安全,如果我只希望使用Facebook登錄,例如,用於用戶註冊和登錄,即沒有本地註冊/登錄表單?使用燒瓶社會通過OAuth提供人只,無本地註冊/登錄表單

我查看了Flask-Social示例應用程序和文檔,但無法分辨這是否可行。在示例應用程序中,除非用戶以前註冊過,否則用戶無法使用Facebook登錄。在註冊示例應用程序後,他們可以將他們的Facebook帳戶與其本地帳戶相關聯。

當我嘗試調用social.facebook.get_connection()時,我得到一個AttributeError 'AnonymousUser' object has no attribute 'id',因爲沒有current_user,它是在註冊/登錄後由flask-security定義的。

+0

@theva 你需要在你的項目中編寫上面的代碼。請參閱https://github.com/mattupstate/flask-social-example/blob/master/app/__init__.py#L51你將知道在哪裏放置代碼。 順便說一句,上面的代碼必須將「db.commit()」更改爲「ds.commit()」 – amos

回答

4

這是不使用@login_failed.connect_via裝飾太多額外的工作是可行的。隨着app您的一個瓶的應用程序的情況下,它看起來像

@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 page上包含完全相同的答案。

+1

我知道這是一箇舊的帖子,但我找不到@ login_failed.connect_via裝飾器的任何文檔...這是Flask-social或Flask-security或別的什麼的一部分? – theva

+1

@theva這是一個信號,在這裏被解僱:https://github.com/mattupstate/flask-social/blob/develop/flask_social/views.py#L192 – erik