Портал Python-программистов

Форумы сайта python.su

Вы не зашли.

Объявление

Официальная wiki коммунити: wiki.python.su обсуждение

Официальная джаббер конференция коммунити: pythonua@conference.jabber.ru (всегда 20-35 онлайн участников). Настройки

КОД ОБОРАЧИВАТЬ В ТЕГИ [code][/code]
  • > TurboGears
  • > TG+SA: помогите разобраться с md5 password encryption, пожалста [RSS Feed]

#1 2009-10-21 16:23:32

hildi
Питонер
Зарегистрирован: 2008-10-07
Сообщений: 64
Профиль

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/RoughDoc … highlight=(password)|(encryption) и еще разные доки на docs.turbogears.org и nabble, но ничего подходящего не нашла :-(

Неактивен

 

#2 2009-10-21 16:57:18

PooH
Питонер
Откуда: Барнаул
Зарегистрирован: 2006-12-05
Сообщений: 798
Профиль

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

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

Отредактированно PooH (2009-10-21 16:57:44)

Неактивен

 

#3 2009-10-21 17:06:28

hildi
Питонер
Зарегистрирован: 2008-10-07
Сообщений: 64
Профиль

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

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

Неактивен

 

#4 2009-10-21 17:20:50

PooH
Питонер
Откуда: Барнаул
Зарегистрирован: 2006-12-05
Сообщений: 798
Профиль

Re: 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 2009-10-21 17:30:39

hildi
Питонер
Зарегистрирован: 2008-10-07
Сообщений: 64
Профиль

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

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

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

Неактивен

 

#6 2009-10-21 17:34:10

PooH
Питонер
Откуда: Барнаул
Зарегистрирован: 2006-12-05
Сообщений: 798
Профиль

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

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

Неактивен

 

#7 2009-10-21 17:38:40

hildi
Питонер
Зарегистрирован: 2008-10-07
Сообщений: 64
Профиль

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

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

Неактивен

 

#8 2009-10-22 07:52:09

PooH
Питонер
Откуда: Барнаул
Зарегистрирован: 2006-12-05
Сообщений: 798
Профиль

Re: 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 2009-10-23 14:51:36

hildi
Питонер
Зарегистрирован: 2008-10-07
Сообщений: 64
Профиль

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

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

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

Неактивен

 
  • > TurboGears
  • TG+SA: помогите разобраться с md5 password encryption, пожалста [RSS Feed]

Board footer

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson

Board footer

Реклама: