2011-09-20 123 views
8

我想在我写的django项目中使用MongoEngine。我很难获得(或了解如何)身份验证后端的工作原理。MongoEngine用户身份验证(django)

尽我所知,用户对象不存储在请求中。

我有它的工作,但我不知道我是否以正确/安全的方式做它。如果有人可以看我的代码,我将不胜感激。

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') 
在我的settings.py

我在文件的顶部添加:

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

SESSION_ENGINE = 'mongoengine.django.sessions' 

import mongoengine 
mongoengine.connect('project') 

回答

10

不知道,如果你看到的任何问题,因为你没有提到的任何但我用mongoengine我AUTH后端,这是我将如何处理它:

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') 

你说用户没有存储在请求...如果你的意思是不是在可用模板,您需要添加AUTH模板背景处理器在你身上右设置(除AUTHENTICATION_BACKENDS设置,您已设置的话):

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

要连接到后续请求登录后的用户,设置AuthenticationMiddleware和用户将是request的所有意见的属性:

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

感谢您的帮助,我已经准备好了它应该如何工作,一个注意事项是您不应该调用视图'login',因为它与实际的登录函数冲突。 – justinfay

+0

正确,我正在复制你的例子。我写的是显示模式 – MattoTodd

+5

感谢您的指针!尽管从** mongoengine.django.auth **(“常规”用户必须从** django.contrib.auth.models **导入用户,而不是** django.contrib .auth **) –