8

私が書いているdjangoプロジェクトでMongoEngineを使用しようとしています。認証バックエンドの仕組みを理解する (または理解する) のに苦労しています。

私が知る限り、ユーザーオブジェクトはリクエストに保存されていません。

私はそれを機能させていますが、正しい/安全な方法で行っているかどうかはわかりません. 誰かが私のコードを見ることができれば、私は大歓迎です。

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

1 に答える 1

10

何も言及していないため、問題が発生しているかどうかはわかりませんが、認証バックエンドにmongoengineを使用しています。これを処理する方法は次のとおりです。

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

ユーザーがリクエストに保存されていないと言います...テンプレートで使用できない場合は、設定に認証テンプレートコンテキストプロセッサを追加する必要があります(すでに設定した AUTHENTICATION_BACKENDS 設定に加えて):

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

ログイン後にユーザーを後続のリクエストにアタッチするには、 を設定します。これにより、ユーザーはすべてのビューでAuthenticationMiddleware の属性になります。request

MIDDLEWARE_CLASSES = (
...
    'django.contrib.auth.middleware.AuthenticationMiddleware',
...
)
于 2011-09-21T04:22:28.707 に答える