Da wir Social Login mit Spring-Boot, Spring-Security und Spring-Social implementiert haben, werden wir anhand des Beispiels erklären, wie es implementiert wird. Ich denke, es wird lange dauern, also wählen Sie bitte nur die Kapitel aus und lesen Sie sie, an denen Sie interessiert sind.
In diesem Beispiel können Sie sich anmelden, indem Sie die Benutzer-ID / das Kennwort sowie die soziale Anmeldung eingeben.
Ich habe Spring-Boot und Spring-Security bei [First Spring Boot] studiert (https://www.amazon.co.jp/dp/4777519694). In diesem Buch verwende ich Spring-Boot und Sicherheit, um eine Listen-App zu erstellen, mit der Sie sich anmelden und abmelden können. Ich wollte jedoch eine Funktion "Mit Twitter anmelden" hinzufügen, also habe ich versucht, sie hinzuzufügen, aber es fiel mir unerwartet schwer. Ta ... Ich habe beschlossen, diesen Artikel zu schreiben, um diese Not von der Welt zu beseitigen.
es ist hier. Https://github.com/PonzyPon/spring-boot-social-demo
V1__create-tables.sql
erstellt.In diesem Beispiel wollte ich sowohl die Anmeldung mit einer eindeutigen ID / dem eindeutigen Passwort als auch die soziale Anmeldung realisieren. Daher wurden zwei Tabellen erstellt. Die Tabelle "Benutzer", die der Master des Benutzers ist, und die Tabelle "UserConnection", die die Informationen zur sozialen Anmeldung enthält. User # user_id
und UserConnection # userId
sind dasselbe. Verwenden Sie diesen Wert zum Verketten.
Säule | Schimmel | Ergänzung |
---|---|---|
user_id | VARCHAR | primary key |
username | VARCHAR | Dies ist auch einzigartig. Vom Benutzer bei der Anmeldung eingegeben |
display_name | VARCHAR | |
encoded_password | VARCHAR |
Säule | Schimmel |
---|---|
userId | VARCHAR |
providerId | VARCHAR |
providerUserId | VARCHAR |
rank | INT |
displayName | VARCHAR |
profileUrl | VARCHAR |
imageUrl | VARCHAR |
accessToken | VARCHAR |
secret | VARCHAR |
refreshToken | VARCHAR |
expireTime | BIGINT |
Diese UserConnection-Tabelle, aber tatsächlich ist diese Konfiguration fast fest. Ich habe den Quellcode für die Bedienung dieser Tabelle überhaupt nicht geschrieben, sondern ihn dem Frühling überlassen. [Gefällt mir] im Frühjahr (https://github.com/spring-projects/spring-social/blob/v1.1.6.RELEASE/spring-social-core/src/main/resources/org/springframework/social) Ein Beispiel für SQL finden Sie in /connect/jdbc/JdbcUsersConnectionRepository.sql). Kopieren und verwenden wir es.
Was ich bei der Verwendung von Spring-Security und Spring-Social nicht verstehe ** Was ist meine Verantwortung? ** Das bedeutet. Mit anderen Worten, es ist schwierig, die Grenze zwischen dem Teil, den ** spring tut, und dem Teil, den Sie tun sollten, zu verstehen. ** Also werde ich erklären, einschließlich dieses Teils.
Spring ** nicht ** für den Teil, der User aus DB lädt. Es muss also eine Schnittstelle namens "UserDetailService" implementiert werden. Dann wird die Implementierungsklasse ohne Erlaubnis aufgerufen und spring lädt den Benutzer. Die Quelle von "UserDetailsServiceImpl" ist hier
Bei der sozialen Anmeldung muss das Vorhandensein der Tabelle "UserConnection" bestätigt werden, die die SNS-Kontoinformationen enthält, und die Daten registriert werden. Dies ist jedoch alles bis zum Frühjahr erledigt. Wir Entwickler können einen Benutzer erstellen und aus der Benutzertabelle laden. Die Quelle von "ConnectionSignUpImpl" ist hier Die Quelle von "SocialUserDetailsServiceImpl" ist hier
SignupService
und UserContext
sind nicht erforderlichGrundsätzlich versuche ich, ein Beispiel für eine soziale Anmeldung mit der Mindestkonfiguration zu erstellen, damit keine unnötigen Klassen vorhanden sind. Sie müssen jedoch beispielsweise keinen "SignupService" erstellen. Diese Schnittstelle wurde von mir selbst erstellt und die Verarbeitung von "SignupServiceImpl # createUser" kann in "ConnectionSignUpImpl # execute" geschrieben werden. Dieses Mal habe ich nur die Klassen aufgeteilt, weil ich dachte, dass die Benutzerregistrierungsfunktion, wenn sie in Zukunft hinzugefügt wird, in verschiedene Klassen unterteilt wird. Außerdem ist "UserContext" eine praktische Klasse, die erstellt wurde, damit die Benutzer-ID des angemeldeten Benutzers leicht abgerufen werden kann. Social Login funktioniert ohne.
Ich habe oben erwähnt, dass der Prozess des Empfangens von Benutzername und Passwort sowie der Authentifizierung dem Frühling überlassen bleibt, die Einstellung jedoch mit "SecurityConfig" erfolgt.
Dies ist das Ende der Erklärung. Von hier an werde ich erklären, wie man sich bewegt und mit dem Sample spielt.
(Wenn Sie "Consumer Key" und "Consumer Secret" Ihrer Twitter-App haben, beginnen Sie bei 3)
Registrieren Sie die App auf Twitter (https://apps.twitter.com/). Bitte geben Sie so ein.
Setzen Sie nach dem Erstellen der App den "Consumer Key" und das "Consumer Secret" der Twitter-App auf (..) φ memo.
git clone https://github.com/PonzyPon/spring-boot-social-demo.git
Erstellen Sie application.properties, indem Sie application.properties.sample unter src / main / resources kopieren
"Consumer Key" und "Consumer Secret" auf "spring.social.twitter.app-id" und "spring.social.twitter.app-secret" in application.properties (..) φ schreiben
Führen Sie mvnw spring-boot: run
im Stammverzeichnis des Projekts aus (wo sich pom.xml befindet) (mvn spring-boot: run ist OK für diejenigen, die maven installiert haben)
Greifen Sie auf localhost zu: 7000
(*^-^*)
(* Wenn beim Anmelden bei Twitter eine Fehlermeldung angezeigt wird, setzen Sie zuerst "Rückruf-URL gesperrt" der Twitter-App auf "Nein". Wenn dies nicht funktioniert, müssen Sie Google verwenden, um das Problem zu beheben (^ ○ ^).)
Ich habe eine Methode namens "HomeController # writeTweetIdIfLoggedInWithTwitter" für die Demo erstellt. Wenn Sie auf Twitter angemeldet sind, holen Sie sich die neueste tweetId aus der Zeitleiste des Kontos und schreiben Sie sie in die Konsole. Sie können auch mit der hier verwendeten Variablen "twitter" twittern. Es ist als Beispiel in der Quelle geschrieben. Bitte kommentieren Sie es aus und probieren Sie es aus
HomeController#writeTweetIdIfLoggedInWithTwitter
// Hello!!Tweet
twitter.timelineOperations().updateStatus("Hello!!");
Rufen Sie "UserContext # getUserId" auf. Der Rückgabewert ist "Optional
public class Sample {
@Autowired
private final UserContext userContext;
public Data getData() {
dao.getData(userContext.getUserId().get());
}
}
Bevor ich dieses Beispiel machte, schrieb ich es mit dem Bild eines Artikels, der mich glücklich machen würde, wenn ich es sehen würde. Wenn Sie Fehler, Meinungen oder Fragen haben, zögern Sie bitte nicht, uns zu kontaktieren. das ist alles.
Recommended Posts