Django

2017-07-28 5 views
9

में पायथन-सोशल-ऑथ का उपयोग कर वेबसाइट पर वापस रीडायरेक्ट करते समय अप्रशिक्षित प्रकार Social-auth-app-django का उपयोग कर वेबसाइट पर सोशल मीडिया प्रमाणीकरण जोड़ने की कोशिश कर रहा हूं।Django

इसलिए मैंने सबसे लोकप्रिय सोशल मीडिया वेबसाइटों (फेसबुक, ट्विटर, Google+) के लिए अलग-अलग ऐप्स बनाए हैं, और वहां कॉलबैक यूआरएल सेट किया है।

लेकिन मैं जब मैं से वेबसाइट पर वापस पुनः निर्देशित कर रहा हूँ एक त्रुटि भर में आ रहा हूँ फेसबुक का कहना है:

:

Internal Server Error: /oauth/complete/facebook/ 
Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 39, in inner 
    response = get_response(request) 
    File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/usr/local/lib/python3.5/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func 
    response = view_func(request, *args, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view 
    return view_func(*args, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/social_django/utils.py", line 50, in wrapper 
    return func(request, backend, *args, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/social_django/views.py", line 32, in complete 
    redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/social_core/actions.py", line 41, in do_complete 
    user = backend.complete(user=user, *args, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/social_core/backends/base.py", line 40, in complete 
    return self.auth_complete(*args, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/social_core/utils.py", line 252, in wrapper 
    return func(*args, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/social_core/backends/facebook.py", line 110, in auth_complete 
    return self.do_auth(access_token, response, *args, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/social_core/backends/facebook.py", line 152, in do_auth 
    return self.strategy.authenticate(*args, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/social_django/strategy.py", line 115, in authenticate 
    return authenticate(*args, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/django/contrib/auth/__init__.py", line 74, in authenticate 
    user = backend.authenticate(**credentials) 
    File "/usr/local/lib/python3.5/site-packages/social_core/backends/base.py", line 80, in authenticate 
    return self.pipeline(pipeline, *args, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/social_core/backends/base.py", line 83, in pipeline 
    out = self.run_pipeline(pipeline, pipeline_index, *args, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/social_core/backends/base.py", line 105, in run_pipeline 
    for idx, name in enumerate(pipeline[pipeline_index:]): 
TypeError: unhashable type: 'slice' 

नीचे कैसे मैं social_django कॉन्फ़िगर कर दिया है का सार है

settings.py में:

INSTALLED_APPS = [ 
    'social_django', 
    ... 
] 

AUTHENTICATION_BACKENDS = (
    'social_core.backends.google.GoogleOAuth2', 
    'social_core.backends.twitter.TwitterOAuth', 
    'social_core.backends.facebook.FacebookOAuth2', 

    'django.contrib.auth.backends.ModelBackend', 
) 

SOCIAL_AUTH_FACEBOOK_KEY = 'xxx' 
SOCIAL_AUTH_FACEBOOK_SECRET = 'xxx' 

... 

PIPELINE = { 
    'PIPELINE_ENABLED': True, 
    'STYLESHEETS': {...}, 
    'JAVASCRIPT': {...}, 
    'JS_COMPRESSOR': 'pipeline.compressors.NoopCompressor', 
    'COMPILERS': (
     'pipeline.compilers.sass.SASSCompiler', 
    ) 
} 

बाद में, मैं स्पष्ट रूप से ग करने के लिए डेटाबेस माइग्रेट किए गए नई टेबल काट लें।

Django और social_django के संस्करणों कृपया नीचे:

  • Django: 1.10.5
  • social_django: 1.2.0

के बारे में पाइप लाइन का इस्तेमाल किया, मैं django-pipeline उपयोग कर रहा हूँ, लेकिन यह SASS फ़ाइलों को CSS पर संकलित करने के लिए है।

इस त्रुटि का कारण क्या हो सकता है?

+0

टुकड़ा (जैसे एक सूची के रूप में) एक परिवर्तनशील प्रकार का है। तो यदि आप किसी शब्दकोश की कुंजी में इसका उपयोग करने का प्रयास कर रहे हैं तो आपको unhashable प्रकार त्रुटि –

+0

मिल जाएगी, आपको अपना कोड दिखाना होगा, या कम से कम जिस तरह से आपने python-social-auth को कॉन्फ़िगर किया है। –

+0

कृपया Django संस्करण, पायथन-सोशल-ऑथ संस्करण, पूर्ण ट्रेसबैक, कस्टम पाइपलाइन जैसे कस्टम कॉन्फ़िगरेशन आदि जैसे अधिक विवरण पोस्ट करें – omab

उत्तर

3

मदद की जोड़ना settings.py के लिए नीचे पाइपलाइन समस्या (source) तय कर दी है लगता है:

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details', 
    'social_core.pipeline.social_auth.social_uid', 
    'social_core.pipeline.social_auth.social_user', 
    'social_core.pipeline.user.get_username', 
    'social_core.pipeline.user.create_user', 
    'social_core.pipeline.social_auth.associate_user', 
    'social_core.pipeline.social_auth.load_extra_data', 
    'social_core.pipeline.user.user_details', 
    'social_core.pipeline.social_auth.associate_by_email', 
) 
1

यह त्रुटि किसी ऑब्जेक्ट ऑब्जेक्ट से स्लाइस प्राप्त करने का प्रयास करते समय उठाती है। तो, हां ट्रेसबैक की आखिरी पंक्ति के बिंदु पर, pipelines एक dict ऑब्जेक्ट है जब इसे एक अनुक्रम माना जाता है जो डिफ़ॉल्ट मान sociel_core.pipeline.DEFAULT_AUTH_PIPELINE है जब तक कि आपकी सेटिंग्स PIPELINE ऑब्जेक्ट प्रदान न करे।

https://github.com/python-social-auth/social-core/blob/ccc50a5932b199a1a5209a08563c8997eb99391d/social_core/strategy.py#L99

https://github.com/python-social-auth/social-core/blob/ccc50a5932b199a1a5209a08563c8997eb99391d/social_core/pipeline/init.py#L1

इस प्रकार मैं अपनी सेटिंग्स मॉड्यूल में शायद कुछ है कि इस पाइप लाइन है कि एक दृश्य (सूची, टपल, कस्टम) और नहीं एक dict होना चाहिए खराब करता संदेह है।

संकेत: ipython इंस्टॉल करें और python manage.py shell के साथ खेलें और अनुवर्ती निरीक्षण करें।

>>> from social_core.strategy import BaseStrategy 
>>> st = BaseStrategy() 
>>> st.get_pipeline() 
---> ??? 
>>> from django.conf import settings 
>>> settings.PIPELINE 
---> ??? 

आशा इस

+0

'st.get_pipeline() 'इस त्रुटि को फेंक देता है:' NotImplementedError: subclass में कार्यान्वित करें '। क्या पाइपलाइन को पाइथन-सोशल-एथ के साथ लागू किया जाना चाहिए? – h4k1m