2014-09-10 15 views
9

Używam python-social-auth do logowania się z sieciami społecznościowymi z mojej aplikacji Django. Na moim komputerze lokalnym wszystko działa poprawnie, ale gdy wdrożyć do serwera pojawia się następujący błąd:python oauthlib: in escape ValueError "Tylko obiekty unicode są dostępne"

oauthlib.oauth1.rfc5849.utils in escape 
ValueError: Only unicode objects are escapable. Got None of type <type 'NoneType'>. 

StackTrace:

File "django/core/handlers/base.py", line 112, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "social/apps/django_app/utils.py", line 45, in wrapper 
    return func(request, backend, *args, **kwargs) 
File "social/apps/django_app/views.py", line 12, in auth 
    return do_auth(request.social_strategy, redirect_name=REDIRECT_FIELD_NAME) 
File "social/actions.py", line 25, in do_auth 
    return strategy.start() 
File "social/strategies/base.py", line 66, in start 
    return self.redirect(self.backend.auth_url()) 
File "social/backends/oauth.py", line 99, in auth_url 
    token = self.set_unauthorized_token() 
File "social/backends/oauth.py", line 158, in set_unauthorized_token 
    token = self.unauthorized_token() 
File "social/backends/oauth.py", line 177, in unauthorized_token 
    method=self.REQUEST_TOKEN_METHOD) 
File "social/backends/base.py", line 202, in request 
    response = request(method, url, *args, **kwargs) 
File "requests/api.py", line 44, in request 
    return session.request(method=method, url=url, **kwargs) 
File "requests/sessions.py", line 349, in request 
    prep = self.prepare_request(req) 
File "requests/sessions.py", line 287, in prepare_request 
    hooks=merge_hooks(request.hooks, self.hooks), 
File "requests/models.py", line 291, in prepare 
    self.prepare_auth(auth, url) 
File "requests/models.py", line 470, in prepare_auth 
    r = auth(self) 
File "requests_oauthlib/oauth1_auth.py", line 87, in __call__ 
    unicode(r.url), unicode(r.method), None, r.headers) 
File "oauthlib/oauth1/rfc5849/__init__.py", line 293, in sign 
    request.oauth_params.append(('oauth_signature', self.get_oauth_signature(request))) 
File "oauthlib/oauth1/rfc5849/__init__.py", line 128, in get_oauth_signature 
    uri, headers, body = self._render(request) 
File "oauthlib/oauth1/rfc5849/__init__.py", line 199, in _render 
    headers = parameters.prepare_headers(request.oauth_params, request.headers, realm=realm) 
File "oauthlib/oauth1/rfc5849/utils.py", line 31, in wrapper 
    return target(params, *args, **kwargs) 
File "oauthlib/oauth1/rfc5849/parameters.py", line 57, in prepare_headers 
    escaped_value = utils.escape(value) 
File "oauthlib/oauth1/rfc5849/utilsy", line 56, in escape 
    'Got %s of type %s.' % (u, type(u))) 

Niektóre pakiety z requirements.txt pliku:

Django==1.6.6 
google-api-python-client==1.1 
oauth2==1.5.211 
oauthlib==0.6.3 
python-openid==2.2.5 
python-social-auth==0.1.26 
requests==2.4.0 
requests-oauthlib==0.4.1 
six==1.7.3 
+0

Jaka wersja Pythona używasz? Mam podejrzenie, co to powoduje, ale nie jestem w 100% pewny. –

+0

@ sigmavirus24 To jest Python 2.7.6. Na tym samym komputerze mam inny projekt Django, który używa '' python-social-auth'' i działa absolutnie dobrze. – vero4ka

+0

Pomyślałem, że różnica może być w ustawieniach "lokalnych", ale biorąc pod uwagę, że masz inną aplikację, która jest bardzo ciekawa. Nie jestem zaznajomiony z tymi projektami, aby były pomocne, ale wskażę opiekunów wniosków-oauthlib na ten temat, aby sprawdzić, czy mogą pomóc. –

Odpowiedz

1

Ten błąd wystąpił, gdy nie podałem mojego klucza i tajnych informacji użytkownika OAuth w moim pliku ustawień django. Zasadniczo jest to błąd "Wymagane ustawienie nie znaleziono". Czy warto sprawdzić wszystkie ustawienia skopiowane pomyślnie po wdrożeniu?

+0

Dziękujemy! Komunikat o błędzie był tak mylący, że patrzę w każdym miejscu, z wyjątkiem nazw zmiennych w '' settings.py''. – vero4ka

0

Uaktualniłem do Pythona-social-auth i miałem ten sam problem z logowaniem do Linkedin. Nazwy parametrów w ustawieniach zostały zmienione w najnowszej wersji, więc zamiast tego: LINKEDIN_CONSUMER_KEY i LINKEDIN_CONSUMER_SECRET zostaną użyte: SOCIAL_AUTH_LINKEDIN_KEY i SOCIAL_AUTH_LINKEDIN_SECRET.

-2

problem przychodzi do ciebie, jeśli to stwierdzenie ma błąd ortograficzny:

tweepy.OAuthHandler(consumer_key,consumer_secret)