6

Ich versuche, in wie beschrieben verwenden Facebook anmelden https://github.com/spring-guides/gs-accessing-facebookFrühling Social: „Es kann keine ConnectionRepository bekommen: kein Benutzer angemeldet“

Wenn ich versuche JdbcUsersConnectionRepository zu schaffen, ich brauche Frühling Sicherheit in Klassenpfad. Und wenn ich Frühling Sicherheit hinzufügen, erhalte ich

"java.lang.IllegalStateException: Unable to get a ConnectionRepository: no user signed in" 

wenn man versucht, Verbindung zu erhalten

Connection<Facebook> connection = connectionRepository.findPrimaryConnection(Facebook.class); 

oder Überprüfung

if (!facebook.isAuthorized()) 

All dies geschieht nur, wenn der Frühling Sicherheit im Klassenpfad ist

Antwort

1

Social Connection sollte mit jeder Authentifizierung übereinstimmen r. Es scheint, Benutzer sollte sich durch Benutzername/Passwort oder Service Provider einloggen. schauen Versuchen bei http://docs.spring.io/spring-social/docs/1.0.x/reference/html/signin.html

"java.lang.IllegalStateException: Unable to get a ConnectionRepository: no user signed in" 

Es geschieht, weil AuthenticationNameUserIdSource standardmäßig verwendet

Intern Frühling Sozial Konfiguration Unterstützung wird die UsersConnectionRepository verwenden, um eine Anfrage-scoped ConnectionRepository Bean zu erstellen. Dabei muss der aktuelle Benutzer identifiziert werden. Daher müssen wir auch getUserIdSource() überschreiben, um eine Instanz einer UserIdSource zurückzugeben.

In diesem Fall wird eine Instanz von AuthenticationNameUserIdSource zurückgegeben. Diese Implementierung der UserIdSource-Schnittstelle setzt voraus, dass die Anwendung mit Spring Security gesichert ist. Es verwendet den SecurityContextHolder, um einen SecurityContext zu suchen und von diesem die Eigenschaft name des Authentication-Objekts zurückzugeben.

Wenn Ihre Anwendung nicht mit Spring Security gesichert ist, müssen Sie die UserIdSource-Schnittstelle als für den Sicherheitsmechanismus Ihrer Anwendung geeignet implementieren. Die UserIdSource Schnittstelle sieht wie folgt aus:

package org.springframework.social; 
public interface UserIdSource { 
    String getUserId(); 
} 

Die getUserId() Methode gibt einfach einen String, der den aktuellen Benutzer eindeutig identifiziert.

Mehr Infos here

+0

Können Sie mir zeigen auf ein Beispiel UserIdSource Implementierung für Facebook? Um eine Benutzer-ID zurückzugeben, muss ich wissen, ob eine Verwendung verbunden ist. Und ich kann es nicht tun, weil ich nicht anrufen kann connectionRepository.findPrimaryConnection (Facebook.class) –

+0

@PavelBernshtam Hallo! Warum meldet sich Ihr Benutzer nicht an und versucht, eine soziale Verbindung für ihn herzustellen (SecurityContextHolder.getContext(). GetAuthentication() ist null)? Social Connection sollte jedem Benutzer entsprechen. Es scheint, Benutzer sollte sich durch Benutzername/Passwort oder Service Provider einloggen. Versuchen Sie http: //docs.spring.io/spring-social/docs/1.0.x/referenz/html/signin.html? – vitaly256

-1

Wenn Sie Frühlings-Boot verwenden, dann sollte die Eigenschaft Sicherheit Grund nicht auf false gesetzt werden. Verstecken Sie diese Zeile in Ihrem application.properties. Dies deaktiviert die Sicherheit und das Booten führt zu einem Fehler, wenn die Federsicherheit deaktiviert ist.

#security.basic.enabled=false 
Verwandte Themen