6

Próbuję użyć Facebook Zaloguj się w sposób opisany w https://github.com/spring-guides/gs-accessing-facebookWiosna społeczna: „Nie można uzyskać ConnectionRepository: nie jesteś zalogowany użytkownik”

Kiedy próbuję tworzyć JdbcUsersConnectionRepository, muszę bezpieczeństwo w sprężyny ścieżka klasy. A kiedy dodać zabezpieczenia sprężyny otrzymam

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

podczas próby odbierającą

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

lub kontroli

if (!facebook.isAuthorized()) 

Wszystko to dzieje się tylko wtedy, gdy zabezpieczenie wiosna jest w ścieżce klasy

Odpowiedz

1

Połączenie społecznościowe powinno odpowiadać dowolnemu zezwoleniu r. Wygląda na to, że użytkownik powinien zalogować się za pomocą nazwy użytkownika/hasła lub Usługodawcy. Spróbuj spojrzeć na 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" 

Zdarza się, ponieważ AuthenticationNameUserIdSource używany domyślnie

Wewnętrznie wsparcie konfiguracja Wiosna Społecznych użyje UsersConnectionRepository stworzyć zapytanie o zakresie ConnectionRepository Bean. Czyniąc to, musi zidentyfikować bieżącego użytkownika. Dlatego musimy również przesłonić metodę getUserIdSource(), aby zwrócić instancję UserIdSource.

W tym przypadku zwracamy instancję obiektu AuthenticationNameUserIdSource. Ta implementacja interfejsu UserIdSource zakłada, że ​​aplikacja jest zabezpieczona Spring Security. Używa obiektu SecurityContextHolder do przeszukiwania SecurityContext, a następnie zwraca właściwość name obiektu Authentication.

Jeśli twoja aplikacja nie jest zabezpieczona Spring Security, musisz zaimplementować interfejs UserIdSource jako odpowiedni dla mechanizmu bezpieczeństwa twojej aplikacji. Interfejs UserIdSource wygląda następująco:

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

Sposób getUserId() po prostu zwraca ciąg znaków, który jednoznacznie identyfikuje bieżącego użytkownika.

Więcej informacji here

+0

Czy możesz wskazać mi przykład wdrożenia UserIdSource na Facebooku? Aby zwrócić identyfikator użytkownika, muszę się dowiedzieć, czy jest ono połączone. I nie mogę tego zrobić, ponieważ nie mogę zadzwonić pod numer connectionRepository.findPrimaryConnection (Facebook.class) –

+0

@PavelBernshtam Hello! Dlaczego twój użytkownik nie loguje się i próbujesz uzyskać dla niego połączenie społecznościowe (SecurityContextHolder.getContext(). GetAuthentication() ma wartość null)? Połączenie społecznościowe powinno odpowiadać każdemu użytkownikowi. Wygląda na to, że użytkownik powinien zalogować się za pomocą nazwy użytkownika/hasła lub Usługodawcy. Czy próbujesz http: //docs.spring.io/spring-social/docs/1.0.x/reference/html/signin.html? – vitaly256

-1

Jeśli używasz Wiosna bagażnik, wtedy podstawowe zabezpieczenie mienia nie powinna być ustawiona na false. Ukryj tę linię w swoim application.properties. Spowoduje to wyłączenie zabezpieczeń i rozruch spowoduje zgłoszenie błędu, jeśli wyłączone zostanie zabezpieczenie sprężynowe.

#security.basic.enabled=false 
Powiązane problemy