django - मैन्युअल रूप से पासवर्ड बिना एक उपयोगकर्ता में लॉगिंग




login django-authentication (4)

Django 1.10 के अनुसार, इस प्रक्रिया को सरल बनाया गया है।

Django के सभी संस्करणों में, किसी उपयोगकर्ता के लिए लॉग इन करने के लिए, उन्हें अपने ऐप के बैकएंड ( प्राधिकृतता के द्वारा नियंत्रित एक से सेटिंग) द्वारा प्रमाणीकृत होना चाहिए।

यदि आप केवल एक लॉगिन को बल देना चाहते हैं, तो आप यह दावा कर सकते हैं कि उपयोगकर्ता उस सूची से पहले बैकेंड द्वारा प्रमाणित किया गया था:

from django.conf import settings
from django.contrib.auth import login


# Django 1.10+
login(request, user, backend=settings.settings.AUTHENTICATION_BACKENDS[0])

# Django <1.10 -  fake the authenticate() call
user.backend = settings.AUTHENTICATION_BACKENDS[0]
login(request, user)

मुझे आशा है कि आप पासवर्ड का उपयोग किए बिना मैन्युअल (सर्वर-साइड शुरू की गई) लॉगिन को लागू करने का सर्वोत्तम तरीका समझने में मेरी सहायता कर सकते हैं मुझे कार्यप्रवाह की व्याख्या करें:

  • उपयोगकर्ता रजिस्टरों
  • धन्यवाद! एक सक्रियण लिंक के साथ एक ईमेल को ब्लॉलाब्ला भेज दिया गया है
  • (खाता अब मौजूद है लेकिन सक्षम नहीं चिह्नित है)
  • उपयोगकर्ता ईमेल खोलता है, लिंक क्लिक करता है
  • (खाता सक्षम है)
  • धन्यवाद! अब आप साइट का उपयोग कर सकते हैं

मैं क्या करने की कोशिश कर रहा हूं, वह ईमेल लिंक पर क्लिक करने के बाद उपयोगकर्ता में प्रवेश कर रहा है, ताकि वह वेबसाइट का उपयोग तुरंत शुरू कर सके।

डीबी में एन्क्रिप्ट होने के बाद से मैं अपना पासवर्ड का उपयोग नहीं कर सकता, क्या कस्टम ऑथेंटिकेशन बैकएंड लिखने वाला एकमात्र विकल्प है?


आप ska पैकेज का उपयोग कर सकते हैं, जो कि डीजेन्ग को कार्यान्वित करने के लिए पासवर्ड-कम लॉगिन है। ska प्रमाणीकरण टोकन के साथ काम करती है और इसकी सुरक्षा SHARED_KEY पर आधारित होती है जो सभी पार्टियों (सर्वर) के लिए समान होनी चाहिए।

क्लाइंट साइड (पार्टी जो पासवर्ड-कम लॉगिन के लिए अनुरोध करती है) पर, आप एक यूआरएल जेनरेट करते हैं और ska उपयोग पर हस्ताक्षर करते हैं। उदाहरण:

from ska import sign_url
from ska.contrib.django.ska.settings import SECRET_KEY

server_ska_login_url = 'https://server-url.com/ska/login/'

signed_url = sign_url(
    auth_user = 'test_ska_user_0',
    secret_key = SECRET_KEY,
    url = server_ska_login_url
    extra = {
        'email': '[email protected]',
        'first_name': 'John',
        'last_name': 'Doe',
    }
    )

टोकन का आजीवन जीवनकाल 600 सेकंड है आप एक lifetime तर्क साबित करके अनुकूलित कर सकते हैं।

सर्वर साइड पर (जिस साइट पर उपयोगकर्ता लॉगिन होते हैं), यह ध्यान में रखते हुए कि आपने ska ठीक से स्थापित किया है, उपयोगकर्ता यूआरएल पर जाकर प्रवेश किया है (उपयोगकर्ता नाम), या अन्यथा - बनाया गया। 3 कॉलबैक हैं जो आप अपनी प्रोजेक्ट की Django सेटिंग्स में कस्टमाइज़ कर सकते हैं।

USER_GET_CALLBACK (स्ट्रिंग): यदि उपयोगकर्ता को सफलतापूर्वक डेटाबेस से प्राप्त किया गया था (मौजूदा उपयोगकर्ता)। USER_CREATE_CALLBACK (स्ट्रिंग): प्रयोक्ता बनाने के तुरंत बाद निकाल दिया गया (उपयोगकर्ता मौजूद नहीं था)। USER_INFO_CALLBACK (स्ट्रिंग): सफल प्रमाणीकरण पर निकाल दिया गया।

अधिक के लिए दस्तावेज़ीकरण देखें ( http://pythonhosted.org/ska/ )


दान के उत्तर के जवाब।

अपना बैकएंड लिखने का एक तरीका:

from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend

class HashModelBackend(ModelBackend):

def authenticate(self, username=None, **kwargs):
    UserModel = get_user_model()
    if username is None:
        username = kwargs.get(UserModel.USERNAME_FIELD)
    try:
        user = UserModel._default_manager.get_by_natural_key(username)
        return user
    except UserModel.DoesNotExist:
        return None

उत्तर django.contrib.auth.backends.ModelBackend स्रोत कोड पर आधारित है। यह डीजेंगो 1.9 के लिए वास्तविक है

और मैं डीजेन्गो के डिफ़ॉल्ट के नीचे कस्टम बैकएंड रखूंगा:

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'yours.HashModelBackend',
]

क्योंकि अकाउंट सक्रियण स्वयं प्रवेश करने से कम संभव है। Https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#specifying- प्रमाणीकरण-बैकों के अनुसार:

AUTHENTICATION_BACKENDS के क्रम का मामला है, इसलिए यदि एकाधिक बैकएंड में एक ही उपयोगकर्ता नाम और पासवर्ड मान्य है, तो Django पहले सकारात्मक मैच पर प्रोसेसिंग बंद कर देगा।

सावधान रहें कि यह कोड गलत पासवर्डों के साथ भी आपके उपयोगकर्ताओं को प्रमाणित करेगा।


आपको किसी उपयोगकर्ता को लॉग इन करने के लिए पासवर्ड की ज़रूरत नहीं है। auth.login फ़ंक्शन सिर्फ एक User ऑब्जेक्ट लेता है, जिसे आप संभवतः डेटाबेस से प्राप्त करते हैं, जब आप खाते को सक्षम करते हैं। तो आप सीधे login करने के login पास कर सकते हैं।

बेशक, आपको सावधानी बरतने की ज़रूरत होगी कि कोई भी उपयोगकर्ता पहले से ही सक्षम खाते के लिंक को धोखा दे सकता है, जो तब उस उपयोगकर्ता के रूप में लॉग इन कर देगा।

from django.contrib.auth import login

def activate_account(request, hash):
    account = get_account_from_hash(hash)
    if not account.is_active:
        account.activate()
        account.save()
        user = account.user
        login(request, user)

... आदि।

संपादित किया गया :

हम्म, उस गुण को authenticate करने के लिए उस आवश्यकता को ध्यान में नहीं रखा क्योंकि यह अतिरिक्त संपत्ति है। कोड को देखते हुए, यह सब करता है एक प्रामाणिक बैकएंड के मॉड्यूल पथ के बराबर backend विशेषता है। तो आप इसे नकली बना सकते हैं - ऊपर दिए गए लॉगिन कॉल से पहले, ऐसा करें:

user.backend = 'django.contrib.auth.backends.ModelBackend'




email-confirmation