2011-09-20 4 views
8

내가 쓰고있는 장고 프로젝트에서 MongoEngine을 사용하려고합니다. 인증 백엔드 작동 방법을 얻는 데 어려움이 있습니다.MongoEngine 사용자 인증 (django)

내가 말할 수있는 한 사용자 개체는 요청에 저장되지 않습니다.

나는 제대로 작동하지만 제대로 작동하는지 확실하지 않습니다. 누군가가 내 코드를 볼 수 있다면 크게 감사 할 것입니다. 내 settings.py에서

def login(request): 
    user = authenticate(request.POST['username'],request.POST['password']) 
    if user is not None: 
     request.session['user'] = user 
     if user.is_authenticated: 
      return HttpResponse(user) 
    else: 
     return HttpResponse('login failed') 

def new_page(request): 
    try: 
     user = request.session['user'] 
     if user.is_authenticated: 
      return HttpResponse('welcome') 
    except: 
     return HttpResponse('need be logged in') 

I이 파일의 맨 위에 추가 한 : 어떤 언급도하지 않습니다하지만 난에 대한 mongoengine를 사용하기 때문에 당신이 어떤 문제를보고하는 경우

AUTHENTICATION_BACKENDS = (
    'mongoengine.django.auth.MongoEngineBackend', 
) 

SESSION_ENGINE = 'mongoengine.django.sessions' 

import mongoengine 
mongoengine.connect('project') 

답변

10

확실하지 내 인증 백엔드와이 내가 그것을 처리 할 방법입니다

from django.contrib.auth import login, User 
from mongoengine.queryset import DoesNotExist 

def login_view(request): 
    try: 
     user = User.objects.get(username=request.POST['username']) 
     if user.check_password(request.POST['password']): 
      user.backend = 'mongoengine.django.auth.MongoEngineBackend' 
      login(request, user) 
      request.session.set_expiry(60 * 60 * 1) # 1 hour timeout 
      return HttpResponse(user) 
     else: 
      return HttpResponse('login failed') 
    except DoesNotExist: 
     return HttpResponse('user does not exist') 
    except Exception 
     return HttpResponse('unknown error') 

을 당신은 당신이 템플릿을 사용할 수없는 의미하는 경우 사용자가 ... 요청에 저장되지 않은 말, 당신은 인증 템플릿 상황에 맞는 프로세서를 추가해야 당신 안에 ,

TEMPLATE_CONTEXT_PROCESSORS = (
    ... 
    'django.contrib.auth.context_processors.auth', 
    ... 
) 

는 로그인 후 후속 요청에 연결된 사용자를 만들려면 AuthenticationMiddleware을 설정하고 사용자가 모든 뷰의 request의 속성 될 것입니다 : R 설정합니다 (AUTHENTICATION_BACKENDS에 추가로 설정이 이미 설정 한) :

MIDDLEWARE_CLASSES = (
... 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
... 
) 
+0

정확히 어떻게 작동해야하는지에 대한 도움을 주셔서 감사합니다. 실제 로그인 기능과 충돌하여 'login'보기를 호출해서는 안됩니다. – justinfay

+0

맞습니다. 나는 당신의 모범을 복사하고있었습니다. 내가 쓴 것은 – MattoTodd

+5

포인터를 보내 주셔서 감사합니다! ** mongoengine.django.auth **에서 ** User **를 가져 오는 것은 의미가 있습니다 ("일반"사용자는 ** django.contrib.auth.models **에서 가져와야합니다. ** django.contrib가 아닙니다. .auth **) –

관련 문제