2009-07-24 27 views
17

Ich versuche, eine einfache OAuth Consumer App in Rails zu schreiben. Ich benutze Authlogic für die Handhabung der Authentifizierung und das Authlogic OAuth Plugin, um das Oauth-Ding zu machen.Implizite Benutzererstellung mit Authlogic und Authlogic OAuth Plugin

Das oauth-Plugin stellt einige Helfer zur Verfügung, um die Schaltfläche "Anmelden" zu rendern: oauth_login_button und oauth_register_button. Zusammen mit den Authlogic-Logiken und den Anfragen des Plugins erstellen diese beiden Buttons irgendwie die Sitzung/den Benutzer.

Was folgt als nächstes ist: - Wenn ich den oauth_login_button Helfer verwenden, dann kann das Sitzungsobjekt nicht speichern, da es keinen solchen Benutzer lokal gibt. - Wenn ich den Helfer oauth_register_button verwende, beschwert sich Rails bei jeder Anmeldung nach der ersten, dass das Token bereits vergeben wurde ... das heißt, es kann nicht die zweite Kopie für den gleichen Benutzer erstellen, was richtig ist.

Das Problem ist: Ich möchte nicht BEIDE Register und Login-Schaltflächen auf meiner Website haben.

Auf der Benutzerseite, was ich erreichen möchte, ist ein einzelner Knopf auf der Startseite, sagt etw. wie "Anmelden bei Twitter", auf das der Benutzer klicken muss, um zu den inneren Seiten der Site zu gelangen.

Auf der Serverseite möchte ich implizit das lokale Benutzerkonto erstellen, wenn der Benutzer zum ersten Mal auf meiner Website besucht.

Irgendwelche Hinweise, wie das geht?

Alle Proben auf Authlogic + OAuth ich war in der Lage zu finden, scheinen nicht in etwa mit nur einer einzigen Taste für Zeichen zu kümmern. :(

Antwort

11

Scheint, wie ich die Frage selbst beantworten werde.

ich verwende den folgenden Code auf die Schaltfläche Anmelden (in HAML) zu erzeugen:

- form_tag({:controller => "users", :action => "create"}, {:method => "post"}) do 
    = oauth_register_button :value => "Sign In with Twitter" 

und dann schaffe ich einfach das Sitzungsobjekt des Benutzers in der create-Methode der Userscontroller-Klasse, wenn der Benutzer bereits vorhanden :

Wenn der Benutzer das erste Mal besucht, wird das Benutzerobjekt erfolgreich in der Zeile A gespeichert. Und wenn es nicht ist und ein OAUTH-Token verfügbar ist, versuchen wir, den Benutzer aus der Datenbank abzurufen und zu protokollieren er/sie in.

+0

Genau das, was ich gerade suchte. Danke –

+0

das ist sehr hilfreich – Anurag

+0

Vielen Dank :) –