2011-12-30 4 views
2

Django 고급 초보자는 여기에 있습니다. 벽에 머리를 대고있어 이걸 알아 내려고 해요. 나는 사용자를 등록하고 로그인하기 위해 contrib.auth에 묶인 twython_django_oauth을 사용하는 간단한 webapp를 가지고있다. (변경없이 twython을 사용하고 있습니다.) 문제없이 트위터를 통해 새로운 사용자를 등록 할 수 있습니다.이 사용자는 로그인 한 사용자로 앱에 반환합니다.Twython을 사용하는 장고 앱 Oauth는 'AnonymousUser'객체에 'backend'속성이 없습니다.

Traceback: 
File "/app/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "/app/thislist/twython_django_oauth/views.py" in thanks 
    80.  login(request, user) 
File "/app/lib/python2.7/site-packages/django/contrib/auth/__init__.py" in login 
    82.  request.session[BACKEND_SESSION_KEY] = user.backend 

Exception Type: AttributeError at /thanks 
Exception Value: 'AnonymousUser' object has no attribute 'backend' 

하나는 이상 내가 알 두 번 승인 한 경우이 문제가 발생 등록 된 사용자의 트위터 계정에 웹 애플리케이션이 표시됩니다 있다는 것입니다 : 후속 시도는 사용자 로그인을하지만,이 오류를 반환합니다. 덧붙여 말하면,이 모든 것은 몇 주 전에 잘 작동하는 것처럼 보였습니다. 문제없이 로그인 할 수있는 두 명의 트위터 사용자가 등록되어 있습니다. 이 계정에서는 앱이 한 번만 승인 된 것처럼 보입니다. 그러나, 나는이 사용자가 문제를 일으킬 수있는 변경 사항을 파악하기 위해 등록한 시점까지 앱을 다시 전화 할 수 없습니다. 누군가가 적절한 자격 증명으로 등록 된 것처럼 보이지만 여기 워크 플로우가 AnonymousUser를 반환하는 이유에 대한 통찰력이 있다면, 귀하의 의견을 듣고 싶습니다.

업데이트 : 문제의 원인을 제로로 처리했습니다. twython_django는 트위터 자격증 명을 성공적으로 입력 한 후 사용자가 앱으로 리디렉션 될 때마다 등록 중에 생성되고 webapp의 Twitter 프로필 데이터베이스에 저장되는 비밀 토큰을 잡는 대신 새로운 'oauth_token_secret'을 사용하여 로그인하려고 시도합니다. 결과적으로 django는 사용자를 인증 할 수 없습니다. 따라서 질문은 다음과 같습니다. 이유가 무엇입니까?

try: 
    user = User.objects.get(username = authorized_tokens['screen_name']) 

저장된 비밀 토큰을 사용하여 사용자 개체를 생성하십시오.

+0

이 경우 적용 할 수 있는지 확실하지 않지만 ORM에서 검색 한 것과 같은 방식으로 User 객체를 처리하려고 시도했을 때 유사하다고 생각됩니다. 백엔드 속성을 가진 객체는 ORM이 아니라 (authenticate()를 사용하여) 사용자를 로깅합니다. 적어도 그것은 정상적인 인증에서 작동하는 방법입니다. – Tom

답변

2

예제 코드는 처음 로그인 할 때 username = authorized_tokens [ 'screen_name'] 및 password = authorized_tokens [ 'oauth_token_secret']를 사용하여 새로운 django 사용자를 만듭니다. 두 번째 로그인 할 때 authorized_tokens [ 'oauth_token_secret']가 변경되므로 변경된 토큰을 사용하여 인증하면 비밀번호가 잘못되어 AnonymousUser가 반환됩니다. 이 대답은 분명하다

user = User.objects.get(username = authorized_tokens['screen_name']) 
user.set_password(authorized_tokens['oauth_token_secret']) 
user.save() 

희망 :

은 작동 후 다음 줄을 추가 확인하십시오.질문이 있으시면 언제든지

0

저는 Twython (및 관련 Twython-Django 패키지)의 저자입니다.

질문을 조금 훑어 보았습니다. 문제가 무엇인지에 대해 조금 분실했습니다. 이것은 내가 처음 들어 본 적이 있는데, 나는 장고의 최근 릴리스에서 이것에 영향을 줄 수있는 것이 아무것도 없다고 생각한다. (나는 이중 인증()과 관련된 것을 확인한다.).

디버깅을 도와 드리겠습니다. 신속한 정상 검사와 마찬가지로 콘솔을 열어 샘플 데이터로 authenticate()를 수동으로 실행 해 보셨습니까? 궁극적으로 그것이 AnonymusUser로 문제를 일으키고있는 것처럼 보입니다. 여기에 범위를 좁히면 문제가 실제로 try/except가 아니기 때문에 도움이됩니다. DB에 User가 있는지 확인한 다음 확인하지 않는 것이 좋습니다. 그것은 인증에 전혀 관련이 없습니다. :)

디버깅을 도와 줄 수 있으면 알려주세요. 도움이 필요하면 개인적으로 나에게 직접 문의 해주세요.