Database
 sql >> Datenbank >  >> RDS >> Database

Anmeldung bei externen Diensten

Die Eingabe eines Benutzernamens und Passworts ist eine Möglichkeit, auf ein Konto zuzugreifen, aber es ist nicht die einzige. In diesem Artikel erfahren Sie, wie Sie externe Dienste (wie Google oder Facebook) aktivieren, wenn Sie sich bei einer Datenbank anmelden.

Was sind externe Dienstanmeldungen?

Benutzern die Möglichkeit zu geben, über externe Dienste auf ihre Systemkonten zuzugreifen, ist ein wachsender Trend unter Webdesignern. Diese Option kann mehrere Vorteile bieten, z. B. dass sich Benutzer eine Kombination aus Name und Kennwort weniger merken müssen. Es kann Administratoren auch dabei helfen, Benutzererfahrungen zu personalisieren.

Wenn Webanwendungen eine externe Dienstanmeldung anbieten, sieht der Anmeldebildschirm wie in der Abbildung unten aus. Ein Benutzer kann seinen Benutzernamen und sein Passwort eingeben oder auf eine Schaltfläche klicken, die ihn zum Dienst seiner Wahl (Facebook, Twitter, Google usw.) weiterleitet, wo er sich anmeldet und zur ursprünglichen Anwendung weitergeleitet wird.

Hier ist ein Beispiel für einen Anmeldebildschirm der Vertabelo Academy:

So funktionieren externe Anmeldungen

Das Hinzufügen externer Anmeldedienste erfordert einige zusätzliche Arbeit von den Entwicklern. Die meisten gängigen Social-Media-Dienste verwenden ein Protokoll namens OAuth 2.0 . Nur Twitter verwendet ein älteres Protokoll namens OAuth 1.0 . Das Protokoll ermöglicht das Lesen von Benutzerinformationen wie ihrem vollständigen Namen, ihrer E-Mail-Adresse, ihrem Geschlecht usw. Die genauen verfügbaren Informationen hängen vom Social-Media-Dienst und den Angaben des Benutzers ab. (Zum Beispiel ist es möglich, ein Facebook-Konto ohne angehängte E-Mail-Adresse zu haben.) Unabhängig davon konzentrieren wir uns jedoch darauf, wie dieses System in das Design einer Datenbank implementiert wird.

Als Ausgangspunkt verwenden wir unseren vorherigen Artikel zur Passwortwiederherstellung und E-Mail-Bestätigung als Grundlage. Hier sind die benutzerbezogenen Tabellen aus diesem Artikel.




Entwerfen einer Datenbank für externe Anmeldungen

Viele Informationen im user_account Tabelle bezieht sich auf die Handhabung der Authentifizierung – plus verwandte Funktionen wie Passworterinnerung und E-Mail-Bestätigung – auf eigene Faust. Wir benötigen diese Spalten nicht, wenn sich der Benutzer bei einem externen Dienst authentifiziert. Die Passworterinnerung, die E-Mail-Bestätigung und andere Funktionen werden vom externen Dienst verwaltet. Der erste Schritt in unserem Design besteht darin, das user_account Tabelle in zwei Tabellen:user_account und user_profile .

Das user_account table führt nun die gesamte Authentifizierungsbuchhaltung selbst durch. Das user_profile Die Tabelle stellt die tatsächlichen Benutzerinformationen dar:Name, E-Mail, Zeitzone, Akzeptanz der Nutzungsbedingungen und so weiter. Alle Geschäftstabellen sollten jetzt mit user_profile Tabelle.

Nun zu den externen Konten. Der OAuth Das Protokoll gibt uns am Ende eine Kennung für den Benutzer in seinem System. Diese Kennung ist nicht der Name des Benutzers im externen System. Es ist nur eine Kennung für unsere Anwendung. Wir müssen diese interne ID in unserer Datenbank speichern. Wir könnten nullfähige Spalten facebook_id hinzufügen , google_id , twitter_id usw. in die Tabelle user_profile . Aber wir werden etwas anderes machen.

Wir werden neue Tabellen hinzufügen:facebook_account , twitter_account , google_account , die die externe ID speichert. Auf diese Weise können wir bei Bedarf zusätzliche Informationen speziell für jede soziale Website hinzufügen. Wenn wir eine Anmeldemöglichkeit für eine andere soziale Website hinzufügen möchten, müssen wir das user_profile Tisch. Wir werden lediglich ein weiteres external_service_account Tabelle.

Jede der neuen Tabellen hat dasselbe Spaltenformat. Einer davon ist int user_profile_id , die beide ein Fremdschlüssel sind, der auf die ID-Spalte im user_profile Tabelle und den Primärschlüssel. (Dies kann als Primärschlüssel dienen, da keine zwei Konten in unserem System mit mehreren Konten desselben externen Dienstes verknüpft werden sollten.)

Die andere Spalte ist die ID des externen Kontos – facebook_id , zum Beispiel. Es gibt eine eindeutige Einschränkung für jede der facebook_id , google_id und twitter_id Säulen. Wir wissen, dass zwei Konten nicht dieselbe ID erhalten. Wenn der Benutzer bei einem externen Dienst authentifiziert wird, kennen wir sogar seine facebook_id . Wenn wir die entsprechende Zeile im facebook_account Tabelle und finden Sie das richtige user_profile , wissen wir, welcher Benutzer sich gerade in das System eingeloggt hat. Wenn es keine Zeile mit dieser ID gibt, erstellen wir eine neue Zeile im user_profile Tabelle und eine neue Zeile in der entsprechenden Kontotabelle.

Hier ist das endgültige Modell: