Пароль не установлен для новых django пользователей - PullRequest
1 голос
/ 18 июня 2020

Когда новый пользователь регистрирует учетную запись, панель администратора показывает, что пароль не был установлен для пользователя (несмотря на сохранение его через views.py). Еще одна странная вещь, которую я заметил, - это то, что пароль сохраняется в поле электронной почты в базе данных. Код выглядит нормально. Не уверен, где я ошибся. Любая помощь будет принята с благодарностью.

зарегистрируйтесь html шаблон

{% if user.is_authenticated %}
                <h2>currently logged in as {{ user.username }} </h2>
                {% else %}
                <h1 class="h5 text-center">Create Account</h1>
                <h4>{{ error }}</h4>
                <form method="POST">
                  {% csrf_token %}
                  <div class="form-group">
                    <label for="username">Username</label>
                    <input type="text" class="form-control" name="username" autocomplete="username" placeholder="Username" id="id_username" required>
                  </div>
                  <div class="form-group">
                    <label for="password1">Password</label>
                    <input type="password" class="form-control" name="password1" placeholder="Password"  autocomplete="new-password" required id="id_password1">
                    <small>Password must be at least 8 characters</small>
                  </div>
                  <div class="form-group">
                    <label for="password2">Confirm Password</label>
                    <input type="password" class="form-control" name="password2" placeholder="Confirm Password" autocomplete="new-password" required id="id_password2">
                  </div>
                  <ul>
                    <li>Your password can’t be too similar to your other personal information.</li>
                    <li>Your password must contain at least 8 characters.</li>
                    <li>Your password can’t be a commonly used password.</li>
                    <li>Your password can’t be entirely numeric.</li>
                </ul>
                  <!-- <div class="form-group">
                    <div class="custom-control custom-checkbox text-small">
                      <input type="checkbox" class="custom-control-input" id="sign-up-agree">
                      <label class="custom-control-label" for="sign-up-agree">I agree to the <a target="_blank" href="utility-legal-terms.html">Terms &amp; Conditions</a>
                      </label>
                    </div>
                  </div> -->
                  <button class="btn btn-primary btn-block" type="submit">Create Account</button>
                </form>

views.py

def signup(request):
    if request.method == 'GET':
        return render(request, 'events/signup.html', {'form': UserCreationForm()})
    else:
        # Create new user and profile
        if request.POST['password1'] == request.POST['password2']:
            try:
                print(request.POST['password1'])
                print(request.POST['password2'])
                user = User.objects.create_user(request.POST['username'], request.POST['password1'])
                user.save()

                login(request, user)

                return redirect('home')
            except IntegrityError:
                return render(request, 'events/signup.html', {'form': UserCreationForm(), 'error':'Username has already been taken. Please use a different name.'})
        else:
            # Tell the user the passwords don't match
            return render(request, 'events/signup.html', {'form': UserCreationForm(), 'error':'Passwords did not match'})

Нигде в код, но по какой-то причине пароль сохраняется как адрес электронной почты, а фактический пароль не устанавливается.

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Вам нужно указать пароль явно или отправить его в третьем параметре, второй параметр метода create_user - адрес электронной почты, поэтому пароль устанавливается как адрес электронной почты. ссылка на метод set_password

ссылка на метод create_user

Вам нужно что-то вроде этого.

user = User.objects.create_user(username=request.POST['username'])
user.set_password('new password')
user.save()
1 голос
/ 18 июня 2020

Ваш код:

user = User.objects.create_user(request.POST['username'], request.POST['password1'])
            user.save()

См. документы :

create_user(username, email=None, password=None, **extra_fields)

Итак, ой, вы отправляете пароль как второй аргумент, и он интерпретируется как адрес электронной почты.

create_user(username=request.POST['username'], password=request.POST['password1'])

Должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...