2011-09-20 11 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 का उपयोग अपने प्रमाणन बैकएंड और यह कैसे मैं इसे संभाल होता है:

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', 
... 
) 
+0

सहायता के लिए धन्यवाद, मैं इसे ठीक से कैसे काम कर रहा हूं, यह एक नोट है कि आपको 'लॉगिन' दृश्य को कॉल नहीं करना चाहिए क्योंकि यह वास्तविक लॉगिन फ़ंक्शन से जुड़ा हुआ है। – justinfay

+0

सही, मैं आपके उदाहरण की प्रतिलिपि बना रहा था। मैंने जो लिखा वह पैटर्न को दिखाने के लिए – MattoTodd

+5

सूचक के लिए धन्यवाद था! ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** से आयात किया जाना चाहिए ** dongango.contrib.auth.models **, ** django.contrib ** से आयात नहीं किया जाना चाहिए .auth **) –