6

मैं फेसबुक https://github.com/spring-guides/gs-accessing-facebookस्प्रिंग सामाजिक: "एक ConnectionRepository प्राप्त करने में असमर्थ: कोई उपयोगकर्ता साइन इन"

जब मैं JdbcUsersConnectionRepository बनाने के लिए कोशिश कर रहा हूँ में वर्णित के रूप में साइन इन उपयोग करने के लिए कोशिश कर रहा हूँ, मैं वसंत सुरक्षा की जरूरत है कक्षा पथ और मैं प्राप्त जब मैं वसंत सुरक्षा जोड़ने

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

जब कनेक्शन

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

प्राप्त करने की कोशिश कर या जाँच

if (!facebook.isAuthorized()) 

यह सब केवल तब होता है जब वसंत सुरक्षा वर्ग पथ

में है

उत्तर

1

सामाजिक कनेक्शन किसी भी औथ उपयोग के अनुरूप होना चाहिए आर। ऐसा लगता है कि उपयोगकर्ता को उपयोगकर्ता नाम/पासवर्ड या सेवा प्रदाता के माध्यम से लॉगिन करना चाहिए। कोशिश 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" 

को देखो यह इसलिए होता है क्योंकि AuthenticationNameUserIdSource डिफ़ॉल्ट

द्वारा इस्तेमाल किया आंतरिक रूप से, स्प्रिंग और सामाजिक के विन्यास समर्थन UsersConnectionRepository एक अनुरोध-दायरे वाले ConnectionRepository सेम बनाने के लिए प्रयोग करेंगे। ऐसा करने में, इसे वर्तमान उपयोगकर्ता की पहचान करनी चाहिए। इसलिए, हमें UserIdSource के उदाहरण को वापस करने के लिए getUserIdSource() को ओवरराइड करना होगा।

इस मामले में, हम AuthenticationNameUserIdSource का एक उदाहरण के लिए लौट रहे। UserIdSource इंटरफ़ेस का यह कार्यान्वयन मानता है कि एप्लिकेशन स्प्रिंग सुरक्षा के साथ सुरक्षित है। यह सुरक्षा कॉन्टेक्स्ट को देखने के लिए सुरक्षा कॉन्टेक्स्टहोल्डर का उपयोग करता है, और उस से प्रमाणीकरण ऑब्जेक्ट की नाम संपत्ति लौटाता है।

यदि आपका एप्लिकेशन स्प्रिंग सिक्योरिटी के साथ सुरक्षित नहीं है, तो आपको UserIdSource इंटरफ़ेस को अपने एप्लिकेशन की सुरक्षा तंत्र के लिए एप्रोपेट के रूप में लागू करने की आवश्यकता होगी। UserIdSource इंटरफ़ेस इस तरह दिखता है:

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

getUserId() विधि बस एक स्ट्रिंग है जो विशिष्ट वर्तमान उपयोगकर्ता की पहचान देता है।

अधिक जानकारी here

+0

क्या आप मुझे फेसबुक के लिए UserIdSource कार्यान्वयन के उदाहरण के लिए इंगित कर सकते हैं? उपयोगकर्ता आईडी को वापस करने के लिए मुझे यह जानने की आवश्यकता है कि कोई उपयोग कनेक्ट है या नहीं। और मैं ऐसा नहीं कर सकता क्योंकि मैं कनेक्शन को कॉल नहीं कर सकता RRository.findPrimaryConnection (facebook.class) –

+0

@PavelBernshtam हैलो! क्यों आपका उपयोगकर्ता लॉगिन नहीं करता है और आप उसके लिए सामाजिक कनेक्शन प्राप्त करने का प्रयास करते हैं (SecurityContextHolder.getContext()। Get प्रमाणीकरण() शून्य है)? सामाजिक कनेक्शन किसी भी उपयोगकर्ता के अनुरूप होना चाहिए। ऐसा लगता है कि उपयोगकर्ता को उपयोगकर्ता नाम/पासवर्ड या सेवा प्रदाता के माध्यम से लॉगिन करना चाहिए। क्या आप http: //docs.spring आज़माते हैं।कब/वसंत-सामाजिक/docs/1.0.x/संदर्भ/html/signin.html? – vitaly256

-1

आप स्प्रिंग बूट का उपयोग कर रहे हैं, तो संपत्ति सुरक्षा बुनियादी गलत पर सेट नहीं किया जाना चाहिए। इस लाइन को अपने application.properties में छुपाएं। यह सुरक्षा को अक्षम करता है और बूट वसंत-सुरक्षा अक्षम होने पर त्रुटि फेंकता है।

#security.basic.enabled=false 
संबंधित मुद्दे

 संबंधित मुद्दे