3

zu verwenden Ich entwickle eine Web-App in Ruby on Rails. Ich benutze authlogic, um die Authentifizierung durchzuführen. Meine Seite hat ihre eigenen Logins, aber ich hoffe auch Facebook zu benutzen. Ich habe authlogic_facebook_connect (mit Facebooker) ausprobiert. Nach vielen Schluckauf (die Docs sind nicht wirklich vollständig), habe ich authlogic_facebook_connect zur Arbeit und es ist OK. Das standardmäßige "connect" -Verhalten funktioniert perfekt, wenn ich mit Benutzern konfrontiert bin, die noch nie zuvor von einer Site verwendet wurden, aber es führt zu vielen doppelten Logins für Personen, die unterschiedliche E-Mail-Adressen für Facebook und meine Site verwenden. Hier ist, was ich will:Ruby on Rails: Authlogic Facebook-Integration: Verknüpfen Sie Konten mit Benutzereingaben, anstatt automatisch die E-Mail-Adresse

Wenn der Benutzer die Facebook "Connect" -Schaltfläche (und nachdem sie durch die Facebook-Auth Schritt klicken Sie auf "Zulassen"), möchte ich eine Box Pop-up fragen den Benutzer, wenn sie wollen Stellen Sie eine Verbindung mit einem bereits bestehenden Konto auf meiner Website her oder wenn Sie automatisch ein Konto für sie erstellen möchten.

Wenn sie wollen, dass es automatisch für sie generiert wird, sind wir gut und wir gehen wie gewohnt vor, aber wenn sie andererseits ihr Facebook-Konto mit einem Konto auf meiner Seite verknüpfen wollen, möchte ich das tatsächlich Sie geben ihre lokalen Anmeldeinformationen ein und finden den richtigen Account. Mit anderen Worten, ich möchte nicht meine Lösung automatisch herauszufinden, welches Konto wie das richtige aussieht, möchte ich den Benutzer dies tun.

Gibt es ein Gem/Plugin/Quick Hack, das es mir erlaubt, dies entweder mit authlogic_facebook_connect oder OAuth oder etwas anderes zu tun?

--David

Antwort

3

Jemand anderes in der Lage sein Sie auf die perfekte Schmuckstück für diesen Umstand hinzuweisen, aber ich kann Ihnen sagen, dass ich auf ein ähnliches Problem gearbeitet haben, und es war nicht viel Arbeit zu rollen unsere eigene, basierend auf dem oauth2 Juwel.

Hier ist eine Skizze des Codes/Ablaufs, den ich verwende. Benutzer

1) klickt auf ‚Connect to Facebook‘ und diese sendet Ihnen eine Aktion wie diese

def to_facebook 
    options = { 
     :redirect_uri => facebook_callback_url, 
     :scope => "email,publish_stream" # whatever you want to do 
    } 
    client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_API_SECRET, :site => FACEBOOK_API_SITE) 

    redirect_to client.web_server.authorize_url(options) 
end 

2) Benutzer geht auf Facebook und gibt Ihnen alle Zugriff Sie wollen, dann facebook ruft die Rückruf angegeben Sie facebook_callback_url, die Sie auf eine Aktion wie diese nehmen sollte:

def facebook_callback 
    client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_API_SECRET, :site => FACEBOOK_API_SITE) 
    access_token = client.web_server.get_access_token(params[:code], :redirect_uri => facebook_callback_url) 

    do_my_custom_user_association(access_token) 
end 

Dann können Sie angeben, was Sie in do_my_custom_user_association wollen, sollten Sie eine current_user erhältlich von authlogic haben, wenn jemand angemeldet ist in, so dass Sie zu einem Flow umleiten können, der den angemeldeten Benutzer auswählen lässt, wenn er in sein aktuelles oder ein anderes Konto migrieren möchte. Wenn kein aktueller Nutzer vorhanden ist, können Sie diese an einen Kontoerstellungsfluss senden, an den einige Facebook-Daten angehängt sind.

Beachten Sie, dass dies nur eine Skizze ist, gibt Fehlerfälle zu handhaben (zB facebook_callback wird mit den param error_reason getroffen werden, wenn die get_acccess_token ausfällt) und ich empfehle Sie alle oauth2 Interaktion direkt in Ihrem Controller nicht tun, aber die Grundidee ist da.

Siehe http://developers.facebook.com/docs/authentication/, wenn eine der oauth2-Interaktionen keinen Sinn ergibt.

+0

Ausgezeichnet. Das funktioniert perfekt. Vielen Dank. Wissen Sie, ob das Zugriffstoken trotzdem gespeichert werden muss, um es später in der Sitzung wiederzuverwenden? – DavidH