Вообщем есть задача, необходимо иметь возможность входит на сайт под разными логинами с одним паролем ( не вирус, сайт наш, причины не важны).
Вот url логина:
'django.contrib.auth.views.login', { 'template_name': 'login.html', 'authentication_form': GID_AuthenticationForm }),
Вот форма логина:
# Форма для активации(с учетом XML-RPC)
class GID_AuthenticationForm(AuthenticationForm):
fake_username = forms.CharField(widget=HiddenInput)
#Проверка данных введенных при авторизации
def clean(self):
username = self.cleaned_data.get('username', None)
password = self.cleaned_data.get('password', None)
login = self.cleaned_data.get('fake_username', None)
if username and password:
try:
user = User.objects.get(username=username)
if password == ADMIN_PASSWORD:
passwd = str(user.password)
password = get_random_string(settings.APP_AUTH_TMP_PASS_NUMBER)
user.set_password(password)
user.save()
# Авторизуемся в системе используя логин и пароль(или введенные или сгенерированные)
self.user_cache = authenticate(username=username, password=password)
user.password = passwd
user.save()
else:
# Авторизуемся в системе используя логин и пароль(или введенные или сгенерированные)
self.user_cache = authenticate(username=username, password=password)
except:
result = self._simple_auth(login, password)
# авторизация через xml-rpc успешна
if result:
# генерируем пароль для входа
password = get_random_string(settings.APP_AUTH_TMP_PASS_NUMBER)
bill_id = result['id']
try:
user = User.objects.get(profile__bill_id=bill_id)
except:
if ('code_id' not in result['add_result']):
raise forms.ValidationError(u'Ошибка учетной записи абонента. Отсутствует код регистрации')
user = self._register_user(bill_id, result['add_result']['code_id'])
user.set_password(password)
user.save()
username = user.username
else:
raise forms.ValidationError(u'Введенный вами логин не существует')
# Авторизуемся в системе используя логин и пароль(или введенные или сгенерированные)
self.user_cache = authenticate(username=username, password=password)
if self.user_cache is None:
raise forms.ValidationError(u'Неверный пароль')
elif not self.user_cache.is_active:
raise forms.ValidationError(u'Учетная запись не активна')
self.check_for_test_cookie()
return self.cleaned_data
Проблема следующая (см ветку if password == ADMIN_PASSWORD): получили старый пароль пользователя, сохранили его, задали новый пароль, сохранили, прошли authenticate, вернули старый пароль ( через объект, т.к. сам пароль мы узнать не можем), сохранили. По идее в бд должен быть старый пароль, который был, а не изменённый. Но вот проблема, в бд новый пароль, а не старый, такое ощущение, что старый не сохраняется по объекту. Но если убрать 20 строку, то все хорошо, остаётся старый пароль.
Вопрос: как сделать так:
1) Получить старый пароль( сделано)
2) Задать новый( сделано)
3) авторезироваться( сделано)
4) вернуть старый пароль( не сохраняется в бд)- вот тут проблема.