Автоматическое создание пользователя в Django

Vladimirych

Новичок
Пользователь
Авг 7, 2020
12
1
3
Я сейчас автоматом создаю пользователя на сайте получив его данные из спортивного приложения после того, как человек подтвердил авторизацию. Делаю это таким кодом:

Код:
user, created = User.objects.update_or_create(password = athlete_id, username: access_token)

Это решение не работает, потому что в этом случае пароль хранится в открытом виде и пользователь потом не может залогиниться. Я так понимаю из-за того, что при обычном варианте регистрации Джанго хэширует пароль, потом сравнивает вводимый пароль с его хэшем и авторизует пользователя. А при такой автоматической регистрации пароль хранится в открытом виде, Джанго при попытке логина натыкается на сам пароль вместо его хэша и выдает ошибку авторизации.

Получается, нужно или хэшировать пароль перед добавлением в базу или при авторизации заставить Джанго искать именно вводимый пароль, а не его хэш. Подскажите, пожалуйста, как реализовать любой из вариантов?

Ценности в пароле, если что никакой нет, можно их хоть все вывесить на отдельной странице сайта, поэтому я и решил хранить их в открытом виде, что опасности в этом никакой нет. Но вот столкнулся с проблемой авторизации.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Для хэширования паролей используется метод set_password(). Вот ссылка на документацию: ссылка.
Код для создания пользователя примерно такой:
Python:
user = User.objects.create(username=access_token)
user.set_password(athlete_id)
user.save()
 
  • Мне нравится
Реакции: Vladimirych

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Почему-то никак не получается, бьюсь с ним который час. Еще пробовал make_password, тогда, по идее, вообще можно почти не менять то, что у меня сейчас есть, но почему-то не создает пользователя и все тут.
Метод выше подходит для создания пользователя с помощью формы. Без формы можно создать пользователя так:
Python:
User.objects.create_user(username='username', password='password')
 
  • Мне нравится
Реакции: Vladimirych

Vladimirych

Новичок
Пользователь
Авг 7, 2020
12
1
3
Для хэширования паролей используется метод set_password().

Почему-то никак не получается, бьюсь с ним который час. Еще пробовал make_password, тогда, по идее, вообще можно почти не менять то, что у меня сейчас есть, но почему-то не создает пользователя и все тут.

Код:
from django.contrib.auth.hashers import make_password

user, created = User.objects.update_or_create(password = make_password(athlete_id), username: access_token)
 

Vladimirych

Новичок
Пользователь
Авг 7, 2020
12
1
3
Так пробовал, почему-то у меня автоматический логин в коде после этого не работал. После создания пользователя я его автоматом же и залогиниваю.

Придумал, как обойти проблему. Пароль просто через shell можно выборочно менять при необходимости, чтобы войти под пользователем. Тем самым set_password который вы в начале посоветовали.
 

Форум IT Специалистов