2013-08-01 13 views
7

È possibile utilizzare Flask-Social e Flask-Security se si desidera utilizzare solo l'accesso Facebook, ad esempio per la registrazione e l'accesso utente , cioè nessun modulo di registrazione/login locale?Utilizzo di Flask-Social solo con provider Oauth, nessuna registrazione locale/moduli di accesso

Ho controllato l'applicazione e la documentazione di esempio Flask-Social ma non sono riuscito a capire se è possibile. Nell'applicazione di esempio, gli utenti non possono accedere con Facebook a meno che non si siano registrati in precedenza. Dopo essersi registrati con l'applicazione di esempio, possono associare il proprio account Facebook al proprio account locale.

quando ho provato a chiamare social.facebook.get_connection() ho ricevuto una AttributeError 'AnonymousUser' object has no attribute 'id' perché non c'è current_user, che è definito da pallone-sicurezza dopo la registrazione/login.

+0

@theva è necessario scrivere il codice come sopra nel progetto. per favore vedi https://github.com/mattupstate/flask-social-example/blob/master/app/__init__.py#L51 saprai dove posizionare il codice. BTW, il codice sopra deve cambiare "db.commit()" a "ds.commit()" – amos

risposta

4

Questo è fattibile senza troppo lavoro extra usando il decoratore @login_failed.connect_via. Con app come l'istanza di un'applicazione Flask, sarebbe simile

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

Per quanto riguarda la compilazione del roba rilevante per creare l'utente, mi basta creare una stringa casuale per la password, e non hanno avuto problemi lasciando l'e-mail nulla. Ho anche incluso la stessa risposta nello Flask-Social github page.

+1

So che questo è un vecchio post ma non riesco a trovare alcun documento per il @ login_failed.connect_via decoratore ... Fa parte di Flask-social o Flask-security o qualcos'altro? – theva

+1

@theva è un segnale che viene attivato qui: https://github.com/mattupstate/flask-social/blob/develop/flask_social/views.py#L192 – erik

Problemi correlati