2016-02-23 14 views
5

क्या यूज़रनेम के रूप में उपयोगकर्ता के साथ उपयोगकर्ता खाते बनाना और अलाउथ का उपयोग कर पासवर्ड जैसे कोई अन्य विवरण बनाना संभव है? इरादा साइनअप प्रक्रिया को यथासंभव आसान बनाना है। क्या पासवर्ड साइनअप पर छोड़ा जा सकता है और ईमेल पुष्टिकरण पर अपडेट किया जा सकता है? मैंने इस परिदृश्य को पायथन खोल (./manage.py shell) में आजमाया है और सफल आउटपुट था।पासवर्ड के बिना Django allauth साइनअप

In [1]: from django.contrib.auth.models import User 

In [2]: User.objects.create(username='nopass') 
Out[2]: <User: nopass> 

In [3]: User.objects.all() 
Out[3]: [<User: userone>, <User: nopass>] 
In [4]: usr=User.objects.all()[1] 
In [5]: usr.set_password('pwdnotset') 
In [6]: usr.save() 
In [7]: from django.contrib.auth import authenticate 
In [8]: authenticate(username='nopass',password='pwdnotset') 
Out[8]: <User: nopass> 

मैं this link का हवाला दिया और पाया था कि उस समय allauth के लिए कोई ऐसी सेटिंग है। हालांकि उत्तर 2013 में पोस्ट किया गया था। यह उपयोगी होगा अगर कुछ अलाउथ कॉन्फ़िगरेशन के साथ साइनअप पर पासवर्ड के बिना उपयोगकर्ता बनाने का कोई तरीका तैयार किया गया हो। अग्रिम में धन्यवाद।

+1

क्या आपको उत्तर देने वाला मिला? –

+0

मुझे लगता है कि आप इसके लिए एक allauth एडाप्टर लिखकर इसे हल कर सकते हैं। मुझे फिर से मेरे कोड रेपो के माध्यम से ब्राउज़ करने दें। अगर मुझे पता चला कि मैं इसे यहां पोस्ट करूंगा। :) – cutteeth

उत्तर

0

मुझे लगता है कि creating a signup form with an overridden signup() which sets an unusable password to user और साइनअप प्रक्रिया के लिए उस फॉर्म का उपयोग करने के लिए ऑलथ कहने से इस मुद्दे को हल किया जाएगा। नीचे दिए गए एक जैसा साइनअप() को ओवरराइड करके एक साइनअप फॉर्म बनाएं।

class UserCreationForm(forms.ModelForm): 
    username = forms.CharField(label=_("username")) 
    # declare other fields also 
    ... 
    def signup(self, request, user): 
     user.username = self.cleaned_data['username'] 
     # make sure you are saving all needed data for user model. 
     user.set_unusable_password() 
     user.save() 

settings.py में, allauth बता साइनअप

ACCOUNT_SIGNUP_FORM_CLASS = 'yourapp.forms.UserCreationForm' 

नीचे दिए गए के लिए है कि फार्म का उपयोग करने के लिए उपरोक्त संदर्भ के लिए एक ipdb स्टैक ट्रेस है।

 48   import ipdb;ipdb.set_trace(); 
---> 49   user.email = self.cleaned_data['email'] 
    50   user.username = self.cleaned_data['username'] 

ipdb> user 
<User: test_user> 

ipdb> user.save() 
*** IntegrityError: NOT NULL constraint failed: user.password 

ipdb> user.set_unusable_password() 
ipdb> user.save() 
ipdb> user 
<User: test_user> 
ipdb> 
0

मुझे आपकी परियोजना के लिए कोड को अनुकूलित करने के अलावा, अभी तक यह सब कुछ करने का कोई तरीका नहीं दिख रहा है।

विपरीत अन्य उत्तर क्या कहते हैं, allauth.account.forms में कोड अपने कस्टम साइन-अप फ़ॉर्म से SignUpForm इनहेरिट करता है:

# in allauth.account.forms.py 
class BaseSignupForm(_base_signup_form_class()): 

BaseSignupForm दोनों "मानक" साइन-अप और सामाजिक खाते sign- के लिए प्रयोग किया जाता है अप। "मानक" साइन-अप में, यह SignupForm के रूप में उपवर्गों और पासवर्ड फ़ील्ड जोड़ता है:

# in allauth.account.forms.py 
class SignupForm(BaseSignupForm): 
def __init__(self, *args, **kwargs): 
    super(SignupForm, self).__init__(*args, **kwargs) 
    self.fields['password1'] = PasswordField(label=_("Password")) 
    if app_settings.SIGNUP_PASSWORD_ENTER_TWICE: 
     self.fields['password2'] = PasswordField(
      label=_("Password (again)")) 

तो, मैं दृश्य टेम्पलेट में क्षेत्र है, लेकिन कोई किस्मत को छिपाने की कोशिश की। शायद crispyforms में FormHelper का उपयोग करना रास्ता है।

संबंधित मुद्दे