Форум сайта python.su
Сабж.
Включила мд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()
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)
Офлайн
Меня терзают смутные подозрения, что у вас пароли шифруются дважды. Попробуйте в saveuser убрать шифрование(encrypt_password) и создать пользователя.
Отредактировано (Окт. 21, 2009 15:57:44)
Офлайн
Тогда в базу пишется юзер с clear text паролем.
coбсно, saveuser - это единственное место, где шифрование явно указывается, больше нигде, и как раз это меня и настораживает.
Офлайн
hildiКак единственное? В saveuser
Тогда в базу пишется юзер с clear text паролем.
coбсно, saveuser - это единственное место, где шифрование явно указывается, больше нигде, и как раз это меня и настораживает.
user.password = identity.current_provider.encrypt_password (kw['password'])
self._password = identity.encrypt_password(password)
Офлайн
Видимо, этот метод self._password = identity.encrypt_password(password) ничего не шифрует, в нем же конкретный провайдер не указан.
Ну и в базу-то пишется clear text, значит, действительно шифрования не происходит.
Я бы сама очень хотела понять.
Офлайн
Сегодня уже поздно, завтра на работе посмотрю исходники
Офлайн
Спасибо огромное! :-)
Офлайн
Попробовал на старом проекте включить 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'
Офлайн
Блин, как все просто! А я еще удивлялась, почему в сети практически никакой инфы про шифрование нет: потому что она нафиг не нужна, оказывается!
Черт, у меня же сначала все правильно было.
Основная проблема была в ДНК, в смысле, что при редактировании app.cfg ТГ не перезапускал приложение автоматически и изменения не вступали в силу, а я это не заметила за редактированием других модулей - ведь если контроллер или там модель отредактировать, то приложение перезапускалось само, а если только апп.кфг - то нет.
Тьфу.
Огромное нечеловеческое спасибо за терпение!
Офлайн