2010-11-27 4 views
1

Ich baue gerade eine Web-App (meine erste) und wollte die OAuth-Funktion integrieren, damit sich Benutzer über Twitter und Facebook anmelden können. Ich baue es in Sinatra und habe mir das OmniAuth-Juwel angesehen, das genau richtig für den Job zu sein scheint. Das Problem, das ich habe, ist das Benutzermodell neu zu gestalten.Benutzermodellentwurf bei Verwendung von OAuth

Momentan habe ich den üblichen Vornamen, Nachnamen, Benutzername, E-Mail und Passwort, mit dem Benutzernamen ist einzigartig, so dass ich es für die ID verwenden kann, und wie Twitter, kann ich eingeben www.myapp.com/ Benutzername, um die Informationen zu diesem Benutzer zu finden. Ich entschied, dass ich für die anfängliche Version nur Twitter als Login, dann später Facebook und zuletzt die übliche Anmeldung verwenden werde. Mein Problem ist, dass es sehr wahrscheinlich ist, dass die Nutzer in Facebook die gleichen Benutzernamen haben wie in Twitter. Wenn ich mich zum Beispiel mit twitter anmelde und die ID "newuser" erhalte, wird es ein Problem, wenn jemand mit demselben Nutzernamen von facebook versucht, sich anzumelden.

Das OmniAuth-Juwel arbeitet mit einem Hash der Benutzerinformationen. Ich werde Mongo verwenden, also kann ich ein Twitter- und ein Facebook-Feld in das Benutzermodel einfügen und die Hashes dort aufbewahren. Ich bin nur ein bisschen ratlos, wie man eindeutige IDs erstellt, wenn es mehr als wahrscheinlich ist Beide Dienste haben Leute mit dem gleichen Benutzernamen, oder sobald die normale Anmeldung implementiert ist, könnte jemand sich anmelden und einen Benutzernamen nehmen, der bereits auf Twitter oder Facebook verwendet wird, und verhindert, dass diese Personen sich mit ihrem Twitter/Facebook anmelden Konten.

Ich würde wirklich interessiert zu hören, wie andere dies angegangen sind.

+1

noch einmal, hätte ein bisschen mehr suchen müssen. http://blog.railsrumble.com/blog/2010/10/08/intridea-omniahuth Dies ist ein interessanter Artikel über die Trennung von Benutzern und Autorisierung. –

Antwort

1

Ich bin nur für Auth-Schlüssel unter Verwendung einer Tabelle, bedeutet dies: user_id,: Anbieter,: Schlüsselspalten und einen seperaten Benutzertabelle,: E-Mail: Nickname, ...

Wenn der Benutzer angemeldet Melden Sie sich mit Ihrem Twitter-Account an und melden Sie sich mit Google Acc an. Zum Beispiel haben Sie dann zwei verschiedene Konten, und es gibt keine Lösung, um sie mit einem bestehenden Konto zu verbinden. Ich empfehle Ihnen, dem eingeloggten Benutzer zu erlauben, sein aktuell verwendetes Benutzerkonto mit einem anderen Authentifizierungsanbieter zu verknüpfen (Sie sollten den Benutzer von der Authentifizierung trennen, und nach der ersten Anmeldung sollte er mehr Authentifizierungsschlüssel mit seinem Benutzerkonto verknüpfen können). Er meldet sich bei seinem primären Benutzerkonto an (z. B. über Twitter) und verknüpft sein Benutzerkonto mit seinem Google-Konto, indem er auf das Google-Symbol auf der Authentifizierungsseite klickt.

+0

Danke Nucc. Das Problem, dass ein Benutzer zwei getrennte Konten hat, war etwas, worüber ich besorgt war. Ich denke, solange eine Option "connect account account" (Andere Konten verbinden) eindeutig markiert ist, kann dies vermieden werden. –