2013-08-01 24 views
7

Czy można używać Flask-Social i Flask-Security, jeśli chcę używać tylko Facebooka, na przykład do rejestracji użytkownika i logowania , czyli bez lokalnych rejestracji/formularzy logowania?Używanie Flask-Social tylko z Oauth Provider (s), bez lokalnej rejestracji/formularzy logowania

Przejrzałem aplikację i dokumentację Flask-Social przykład, ale nie mogłem stwierdzić, czy jest to możliwe. W przykładowej aplikacji użytkownicy nie mogą zalogować się za pomocą Facebooka, chyba że wcześniej zarejestrowali się. Po zarejestrowaniu się w przykładowej aplikacji mogą powiązać swoje konto na Facebooku z kontem lokalnym.

Kiedy próbowałem zadzwonić do social.facebook.get_connection() dostałem AttributeError 'AnonymousUser' object has no attribute 'id', ponieważ nie ma current_user, który jest zdefiniowany przez ochronę kolby po rejestracji/zalogowaniu.

+0

@ theva musisz napisać kod jak powyżej w swoim projekcie. zobacz https://github.com/mattupstate/flask-social-example/blob/master/app/__init__.py#L51 będziesz wiedział, gdzie umieścić kod. BTW, powyższy kod trzeba zmienić „db.commit()” na „ds.commit()” – amos

Odpowiedz

4

Jest to możliwe bez zbytniej dodatkowej pracy przy użyciu dekoratora @login_failed.connect_via. Z app jako swojej instancji aplikacji kolbie to będzie wyglądać

@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') 

chodzi o wypełnienie odpowiedniego materiału do tworzenia użytkownika, po prostu stworzyć losowy ciąg o hasło, i nie miał problemów pozostawiając e-mail zerowy. Włączyłem również dokładnie tę samą odpowiedź na Flask-Social github page.

+1

Wiem, że to stary post, ale nie mogę znaleźć żadnych docs dla dekoratora @ login_failed.connect_via ... Czy jest to część Flask-social lub Flask-security, czy coś innego? – theva

+1

@ theva to sygnał, który zostaje zwolniony tutaj: https://github.com/mattupstate/flask-social/blob/develop/flask_social/views.py#L192 – erik