2011-11-30 22 views
6

Django-socialregistration का उपयोग करना है, त्रुटि निम्नलिखित है:'AnonymousUser' ऑब्जेक्ट कोई विशेषता 'बैकएंड'

'AnonymousUser' object has no attribute 'backend' 

कैसे,

  1. मैं फेसबुक पर क्लिक यूआरएल कनेक्ट।
  2. उसने मुझे फेसबुक लिया और मुझे लॉगिन करने के लिए कहा। इसलिए मैंने अनुमति मांगी, मैंने दिया।
  3. इसके बाद यह मुझे मेरी साइट पर रीडायरेक्ट करता है। और सेटअप करने के लिए पूछो। मैं उपयोगकर्ता और ईमेल पता प्रदान करता हूं।

ट्रेस बिंदु::

path/to_file/socialregistration/views.py in post 
128.  self.login(request, user) 

किसी को जानते हैं, क्या गलत है

  • एक बार मैं सबमिट करते हैं, इसके बाद के संस्करण की तरह त्रुटि मिली?

  • +0

    आपका 'बेनामी यूज़र' वर्ग की ऑब्जेक्ट में 'बैकएंड' विशेषता नहीं है। यह गलत है। – Tadeck

    +0

    मुझे पता है कि। मेरा सवाल यह है कि django-socialregistration को वैध उपयोगकर्ता क्यों नहीं मिल सका, लेकिन यह अनामित उपयोगकर्ता – Elisa

    +0

    प्राप्त कर सकता है क्या आप पूर्ण ट्रैकबैक पेस्ट कर सकते हैं? – meson10

    उत्तर

    8

    ओह आदमी मैं इस त्रुटि हर समय प्राप्त करने के लिए प्रयोग किया जाता है, मूल रूप से आपको बुला बिना

    self.login(request, user) 
    

    बुला रहे हैं

    authenticate(username=user, password=pwd)

    पहले

    जब आप authenticate, Django सेट फोन उपयोगकर्ता पर बैकएंड विशेषता, जो बैकएंड का उपयोग करने के लिए नोट करते हैं, अधिक जानकारी के लिए यहां देखें https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.authenticate

    +2

    कोई पाउलो नहीं है, यह मेरा मामला नहीं है। मेरा मामला यह है कि मेरी मूर्खतापूर्ण गलती है कि मैं निम्नलिखित सेटिंग्स को भूल जाता हूं: AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend', 'socialregistration.contrib.facebook.auth.FacebookAuth') – Elisa

    1

    मुझे एक नए पंजीकरण उपयोगकर्ता के लिए एक ही त्रुटि थी।

    def attempt_login(self, email, password): 
        user = authenticate(username=email, password=password) 
        login(self.request, user) 
    
        return user 
    

    मैंने डेटाबेस में चेक किया और उपयोगकर्ता पंजीकरण के बाद बनाया गया है, लेकिन यह त्रुटि अभी भी वहां थी।

    मुझे पता चला - उपयोगकर्ता का लॉगिन (ईमेल) 30 वर्णों से अधिक था, और फॉर्म फ़ील्ड में कोई सत्यापन नहीं था। उपयोगकर्ता नाम get truncated डेटाबेस में होगा, और इसलिए प्रमाणीकरण को गैर-मौजूद लॉगिन के लिए बुलाया गया था।

    254 - चरित्र ईमेल फ़ील्ड की सलाह दी गई लंबाई है।

    समाधान:emailfield-max_length-r11092.patch

    1

    मैं सिर्फ यह त्रुटि आई और इस पोस्ट .. मेरे समाधान के मामले में था पंजीकरण की प्रक्रिया में था मिल गया। जब उपयोगकर्ता दर्ज की गई थी, मेरे एपीआई और serializer पासवर्ड hashing था नहीं .. तो api_view में मैं स्वयं इस तरह पासवर्ड हैश करने के लिए था ..

    from django.contrib.auth.hashers import make_password 
    
        # In the register api.. 
        @ensure_csrf_cookie 
        @api_view(['POST']) 
        def register_api(request): 
    
         # Anywhere before the serializer 
         request.DATA['password'] = make_password(request.DATA['password']) 
    
         # Then the serializer 
         serializer = RegisterSerializer(data=request.DATA) 
    
         # ... etc.. Note that if you want to login after register you will have 
         # to store the initial password is some buffer because.. authentication 
         # the none hashed version.. then 
          authenticate(username=request.DATA['username'], password=someBuffer) 
    

    आशा है कि किसी को मदद करता है ..

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