Только суперпользователь входит в систему, но пользователь не входит в систему - PullRequest
0 голосов
/ 14 февраля 2019

Я создал приложение django с входом, входом в систему и выходом из системы. Я выполнил pyhon manage.py создает пользователя superuser для создания суперпользователя. Если я захожу с этими учетными данными, он регистрируется, но когда я создаю учетные данные, используя пользовательскую форму входапользователь сохраняется в базе данных, но пользователь не входит в систему с помощью формы входа.

models.py
--------
class MyUserManager(BaseUserManager):
     def create_user(self, fname,lname,username, password):
          """
          Creates and saves a User with the given username, date of
          birth and password.
          """
          if not username:
               raise ValueError('Users must have an username')
          user = self.model(username=username,fname=fname,lname=lname)
          user.set_password(password)
          user.save(using=self._db)
          return user


     def create_superuser(self, fname,lname,username, password,email=None):
          """
          Creates and saves a superuser with the given username and password.
          """
          user = self.create_user(
               fname=fname,
               lname=lname,
               username=username,
               password=password,
          )
          user.is_admin = True
          user.is_superuser = True
          user.save(using=self._db)
          return user

class Event(AbstractBaseUser):
     fname = models.CharField('fname', max_length=120)
     lname = models.CharField('lname',max_length=120)
     username = models.CharField('username',max_length = 60,unique=True)
     password = models.CharField('password',max_length=120,default='pavi@2789')

     USERNAME_FIELD = 'username'
     REQUIRED_FIELDS = ['fname','lname']

     objects = MyUserManager()

     def __unicode__(self):
          return self.username

     class Meta:
          # managed = False
          db_table = "user"
forms.py
-------
#User Registration Form
class UserRegistrationForm(forms.Form):
    fname = forms.CharField(required=True,label='FirstName',max_length=32,widget=forms.TextInput(attrs={
        'autocomplete':'off'}))

    lname = forms.CharField(required=True,label='LastName',max_length=32,widget=forms.TextInput(attrs={
        'autocomplete':'off'}))

    username = forms.CharField(required = True,label = 'Username',max_length = 32,widget=forms.TextInput(attrs={
        'autocomplete':'off'}))

    password = forms.CharField(required = True,label = 'Password',max_length = 32,min_length=8,widget=forms.TextInput(attrs={
        'autocomplete':'off'}))

    class Meta:
        model = Event
        fields = ('FirstName', 'LastName', 'username', 'password',)
view.py:
------
def signup(request):
    if request.method == 'POST':
        form = UserRegistrationForm(request.POST)
        if form.is_valid():
            userObj = form.cleaned_data
            username = userObj['username']
            password = userObj['password']
            fname = userObj['fname']
            lname = userObj['lname']
            print (username,password,fname,lname)
            if(len(password)<8):
                # messages.error(request,"This password length should be minimum 8 characters")
                raise ValidationError("This password length should be minimum 8 characters ")
            if not (User.objects.filter(username=username).exists()):
                p = Event(fname=fname, lname=lname, username=username)
                p.set_password(password)
                p.save()
                # return HttpResponseRedirect('Login.html')
                return redirect('/Login/')
            else:
                raise forms.ValidationError('Looks like a username with that username or password already exists')
    else:
        form = UserRegistrationForm()
    return render(request, 'signup.html', {'form':form})
def Login(request):
    form = login_form(request.POST or None)
    if form.is_valid():
        username = form.cleaned_data.get("username")
        password = form.cleaned_data.get("password1")
        print (username,password)
        user = authenticate(username=username, password=password)
        print('user is', user)
        if user is not None and user.is_active:
            print ('entered loop')
            login(request,user)
            return redirect('/home/')
        else:
            print ("username and password are incorrect ")
    else:
        form = login_form()
    return render(request, 'Login.html', {'form': form})

Я объявил AUTH_USER_MODEL = 'auth.User' в settings.py

Я пытался использовать get_user_model() также, но это не работает.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Я проверяю несколько ресурсов, и я думаю, что проблема в

    username = form.cleaned_data.get("username")
    password = form.cleaned_data.get("password1") #here

Может быть, если вы попытаетесь с паролем, он будет работать

PS: я предложу вам, что если вы не реализуетене делайте ничего другого, и если аутентификация Django работает нормально, вы можете наследовать ее свойства и использовать их непосредственно в своем коде.

0 голосов
/ 14 февраля 2019

После регистрации нового пользователя в форме регистрации,

  1. Войдите в систему администратора Django, используя учетную запись суперпользователя, и перейдите к таблице пользователей.
  2. Выберите вновь созданного пользователя.
  3. Установите флажок активации.

Затем попробуйте войти в систему как новый пользователь в другом браузере или в режиме инкогнито chrome.

ИЛИ

Включитьновый пользователь активен по умолчанию, как показано ниже:

 def create_user(self, fname, lname,username, password):
      """
      Creates and saves a User with the given username, date of
      birth, password and keep the user activated by default
      """
      user.is_active = True
      user.save(using=self._db)
      return user  
...