2014-10-27 6 views
5

Ho seguito con successo lungo questo blog più di un mese fa: http://www.artandlogic.com/blog/2014/04/tutorial-adding-facebooktwittergoogle-authentication-to-a-django-application/errore di importazione Python sociale Auth- quando si utilizza l'autenticazione di Google

Quando ho creato un nuovo ambiente, e ricreato i passi, ora sto ottenendo un import errore, no module named google_auth durante il rendering del modello.

risale a questa linea:

<a href="{% url 'social:begin' 'google-oauth2' %}?next={{ request.path }}">Login</a> 

Sembra Django non sta guardando in app sociale per la corretta elaborazione del modello? Qualche idea sul perché questo non funziona più?

#settings.py 
INSTALLED_APPS = (... , 'social.apps.django_app.default', ...) 

AUTHENTICATION_BACKENDS = ('social.backends.google.GoogleOAuth2', 'django.contrib.auth.backends.ModelBackend') 

TEMPLATE_CONTEXT_PROCESSORS = ('django.contrib.auth.context_processors.auth', 
'django.core.context_processors.debug', 
'django.core.context_processors.i18n', 
'django.core.context_processors.media', 
'django.core.context_processors.static', 
'django.core.context_processors.tz', 
'django.contrib.messages.context_processors.messages', 
'social.apps.django_app.context_processors.backends', 
'social.apps.django_app.context_processors.login_redirect') 

#urls.py 
urlpatterns = patterns('', 
url('', include('social.apps.django_app.urls', namespace='social')), 
url('', include('django.contrib.auth.urls', namespace='auth')), 
url(r'^$', 'app.views.home', name='home'), 
) 

EDIT: traceback completa sotto

Environment: 
Request Method: GET 

Django Version: 1.7 
Python Version: 2.7.8 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'charts', 
'social.apps.django_app.default', 
'djcelery', 
'kombu.transport.django') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'social.apps.django_app.middleware.SocialAuthExceptionMiddleware', 
'charts.middleware.SocialAuthExceptionMiddleware') 


Template error: 
In template charts/templates/base.html, error at line 69 
    No module named google_auth 
    59 :   </ul> 


    60 :   </li> 


    61 :   <li> 


    62 :   Hello, <strong>{{ user.get_full_name|default:user.username }}</strong>! 


    63 :   </li> 


    64 :   <li> 


    65 :   <a href="{% url 'auth:logout' %}?next={{ request.path }}">Logout</a> 


    66 :   </li> 


    67 :   {% else %} 


    68 :   <li> 


    69 :   <a href=" {% url 'social:begin' 'google-oauth2' %} ?next={{ request.path }}">Login</a> 


    70 :   </li> 


    71 :   {% endif %} 


    72 :  </ul> 


    73 :  </nav> 


    74 : </head> 


    75 : <body> 


    76 : {% block content %} 


    77 : {% endblock %} 


    78 : <div id="footer"> 


    79 :  <center> 


Traceback: 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    111.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/charts/views.py" in home 
    743.        context_instance=context) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/shortcuts.py" in render_to_response 
    23.  return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/loader.py" in render_to_string 
    174.   return t.render(context_instance) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/base.py" in render 
    148.    return self._render(context) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/base.py" in _render 
    142.   return self.nodelist.render(context) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/base.py" in render 
    844.     bit = self.render_node(node, context) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/debug.py" in render_node 
    80.    return node.render(context) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/loader_tags.py" in render 
    126.   return compiled_parent._render(context) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/base.py" in _render 
    142.   return self.nodelist.render(context) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/base.py" in render 
    844.     bit = self.render_node(node, context) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/debug.py" in render_node 
    80.    return node.render(context) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/defaulttags.py" in render 
    312.     return nodelist.render(context) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/base.py" in render 
    844.     bit = self.render_node(node, context) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/debug.py" in render_node 
    80.    return node.render(context) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/defaulttags.py" in render 
    444.    url = reverse(view_name, args=args, kwargs=kwargs, current_app=context.current_app) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/core/urlresolvers.py" in reverse 
    517.     app_list = resolver.app_dict[ns] 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/core/urlresolvers.py" in app_dict 
    329.    self._populate() 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/core/urlresolvers.py" in _populate 
    303.     lookups.appendlist(pattern.callback, (bits, p_pattern, pattern.default_args)) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/core/urlresolvers.py" in callback 
    231.   self._callback = get_callable(self._callback_str) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/utils/lru_cache.py" in wrapper 
    101.      result = user_function(*args, **kwds) 
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/core/urlresolvers.py" in get_callable 
    101.      not module_has_submodule(import_module(parentmod), submod)): 
File "//anaconda/envs/analytics/lib/python2.7/importlib/__init__.py" in import_module 
    37.  __import__(name) 

Exception Type: ImportError at/
Exception Value: No module named google_auth 
+0

Non dovrebbe essere "url" social: begin "..." –

+0

Hai ragione. in effetti era "social: begin" nel mio html attuale. Domanda fissa – DataSwede

+0

L'errore di importazione può essere generato a causa di un errore di importazione nelle dipendenze ricorsive, che potrebbero non essere visualizzate nel registro django runserver. Entra nella shell di django e poi prova ad importare l'app. Ti mostrerà l'errore corretto. – iamkhush

risposta

4

Se è un'opzione per voi, vorrei proporre di usare django-allauth. Ho usato sia django-allauth che Python Social Auth e personalmente trovo molto più facile lavorare con django-allauth. Quindi, se ne hai la possibilità, provaci

+0

Questo era quello che dovevo fare, sfortunatamente. La libreria di django-allauth ha funzionato perfettamente. – DataSwede

2

Questo è un problema difficile.

L'errore, la prima linea della traccia dello stack dà un indizio: "Traceback: .... wrapped_callback ...." La vista social.apps.django_app.views.auth si chiama ed è avvolto da decoratore psa. Questo alla fine produce l'errore ma penso che django.core.handlers.base.get_response stia nascondendo la vera sorgente di eccezione. Penso che il reraise rende la traccia dello stack incompleta al momento.

L'eccezione si verifica probabilmente in from social.backends.utils.get_backend. Ma è difficile eseguire il debugging a distanza.

Puoi commentare il try-catch intorno alla riga response = wrapped_callback(request, *callback_args, **callback_kwargs) nel file django.core.handlers.base. Qual è la nuova traccia di stack che si ottiene quando si carica la pagina?

+0

Questa volta ho lanciato un valore. Grafici è il nome dell'app Traceback: File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 131.% (callback .__ module__, view_name)) Tipo di eccezione: ValueError at/ Valore di eccezione: la vista charts.views.home non ha restituito un oggetto HttpResponse. Invece restituì None. – DataSwede

+0

Hmm, è meno utile del previsto. Tuttavia ho notato che il mio principale sospettato, il wrapper 'psa', ha" recentemente "avuto un aggiornamento. Questo impegno indica anche "Backend/strategia di refactoring per evitare la dipendenza circolare". src: https://github.com/omab/python-social-auth/blob/master/social/backends/utils.py Questo commit potrebbe non aver aiutato o persino introdotto un nuovo problema di dipendenza circolare nella configurazione. Ora sembra che questo commit sia usato dalle versioni 0.2.0 e successive. Quindi lasciatemi suggerire di effettuare il downgrade del pacchetto: 'pip installa" python-social-auth <0.2.0 "'. BTW: qual è la tua versione social di Django e Python? – rrmoelker

+0

django è '1.7'. Ho eseguito il downgrade a auth di social python '0.1.26' all'inizio di questo problema per vedere se c'era un problema recente con quella libreria, tuttavia non ho avuto successo. Forse '0.2.0' potrebbe essere migliore. Proverò che – DataSwede

Problemi correlati