Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 21, 2009 15:23:32

hildi
От:
Зарегистрирован: 2008-10-07
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

TG+SA: помогите разобраться с md5 password encryption, пожалста

Сабж.

Включила мд5 шифрование тут:

app.cfg

identity.saprovider.encryption_algorithm='md5'
Включила шифрование при создании нового юзера:

    @expose(template="cmts.templates.adduser")
@identity.require(identity.in_group("admin"))
def saveuser(self, **kw):
# .... blabla

if kw['password'] != "":
user.password = identity.current_provider.encrypt_password (kw['password'])
else:
session.close()
return dict(adduser_widget = adduser_widget, message=" Empty password field!")
session.commit()
В результате пароли пишутся в базу в зашифрованном виде, но залогиниться с обыкновенным, незашифрованным паролем нельзя - пишет:
2009-10-21 13:47:19,239 turbogears.identity.saprovider INFO Passwords don't match for user: admi
2009-10-21 13:47:19,239 turbogears.identity WARNING The credentials specified weren't valid

Понять можно :-) Если рассуждать логически, то при логине clear text password должен зашифровываться, чтобы совпасть с тем, что хранится в базе в зашифрованном виде (хотя если тупо скопировать зашифрованный пароль типа “ce365c0b37f3ea94bce7995ff4420c25” из базы, то с ним тоже залогиниться не получается)

Короче, я застряла.

То, что в ниже описанном классе указано - это недостаточно, видимо.
model.py
class User(object):

def permissions(self):
p = set()
for g in self.groups:
p |= set(g.permissions)
return p
permissions = property(permissions)

def by_email_address(cls, email):
return cls.query.filter_by(email_address=email).first()
by_email_address = classmethod(by_email_address)

def by_user_name(cls, username):
return cls.query.filter_by(user_name=username).first()
by_user_name = classmethod(by_user_name)

def _set_password(self, password):
self._password = identity.encrypt_password(password) #<--- вот тут

def _get_password(self):
return self._password

password = property(_get_password, _set_password)
Читала вот тут: http://docs.turbogears.org/1.0/RoughDocs/IdentityEncryptedPassword?highlight=(password)|(encryption) и еще разные доки на docs.turbogears.org и nabble, но ничего подходящего не нашла :-(



Офлайн

#2 Окт. 21, 2009 15:57:18

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

TG+SA: помогите разобраться с md5 password encryption, пожалста

Меня терзают смутные подозрения, что у вас пароли шифруются дважды. Попробуйте в saveuser убрать шифрование(encrypt_password) и создать пользователя.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано (Окт. 21, 2009 15:57:44)

Офлайн

#3 Окт. 21, 2009 16:06:28

hildi
От:
Зарегистрирован: 2008-10-07
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

TG+SA: помогите разобраться с md5 password encryption, пожалста

Тогда в базу пишется юзер с clear text паролем.
coбсно, saveuser - это единственное место, где шифрование явно указывается, больше нигде, и как раз это меня и настораживает.



Офлайн

#4 Окт. 21, 2009 16:20:50

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

TG+SA: помогите разобраться с md5 password encryption, пожалста

hildi
Тогда в базу пишется юзер с clear text паролем.
coбсно, saveuser - это единственное место, где шифрование явно указывается, больше нигде, и как раз это меня и настораживает.
Как единственное? В saveuser
user.password = identity.current_provider.encrypt_password (kw['password'])
При этом вызывается метод _set_password класса User, а в нем
self._password = identity.encrypt_password(password)
Или я чего-то не понимаю, или одно из двух.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Окт. 21, 2009 16:30:39

hildi
От:
Зарегистрирован: 2008-10-07
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

TG+SA: помогите разобраться с md5 password encryption, пожалста

Видимо, этот метод self._password = identity.encrypt_password(password) ничего не шифрует, в нем же конкретный провайдер не указан.
Ну и в базу-то пишется clear text, значит, действительно шифрования не происходит.

Я бы сама очень хотела понять.



Офлайн

#6 Окт. 21, 2009 16:34:10

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

TG+SA: помогите разобраться с md5 password encryption, пожалста

Сегодня уже поздно, завтра на работе посмотрю исходники



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Окт. 21, 2009 16:38:40

hildi
От:
Зарегистрирован: 2008-10-07
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

TG+SA: помогите разобраться с md5 password encryption, пожалста

Спасибо огромное! :-)



Офлайн

#8 Окт. 22, 2009 06:52:09

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

TG+SA: помогите разобраться с md5 password encryption, пожалста

Попробовал на старом проекте включить md5 encryption:
в app.cfg указал
identity.saprovider.encryption_algorithm='md5'

там же проверил что указаны мои классы пользователей:
identity.saprovider.model.user=“rieltiko.model.User”
identity.saprovider.model.group=“rieltiko.model.Group”
identity.saprovider.model.permission=“rieltiko.model.Permission”

запустил, все работает, пароли в базе шифрованные. больше никаких телодвижений не понадобилось.
уберите шифрование из метода saveuser, в _set_password в строчке:
self._password = identity.encrypt_password(password)
берется алгоритм указанный в конфиге.

pooh@pooh$ tg-admin shell
In [1]: from rieltiko.model import *
In [2]: s = User()
In [2]: s.password = '123'
Loading: rieltiko.model.VisitIdentity
In [3]: s.password
Out[3]: u'202cb962ac59075b964b07152d234b70'



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#9 Окт. 23, 2009 13:51:36

hildi
От:
Зарегистрирован: 2008-10-07
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

TG+SA: помогите разобраться с md5 password encryption, пожалста

Блин, как все просто! А я еще удивлялась, почему в сети практически никакой инфы про шифрование нет: потому что она нафиг не нужна, оказывается!
Черт, у меня же сначала все правильно было.
Основная проблема была в ДНК, в смысле, что при редактировании app.cfg ТГ не перезапускал приложение автоматически и изменения не вступали в силу, а я это не заметила за редактированием других модулей - ведь если контроллер или там модель отредактировать, то приложение перезапускалось само, а если только апп.кфг - то нет.
Тьфу.

Огромное нечеловеческое спасибо за терпение!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version