web2py сменить пароль через сервисный звонок - PullRequest
1 голос
/ 13 октября 2011

В web2py я хотел бы изменить пароль с помощью вызова xml-rpc. Как я могу это сделать?

@auth.requires_login()
def call():
    return service()

@service.xmlrpc
def change_password(old_pass, new_pass, confirm_pass):
    #Validate args and then does the following
    #Borrowed from web2py tools.py source
    table_user = auth.settings.table_user 
    passfield = auth.settings.password_field
    s = db(table_user.id == auth.user_id) 
    d = {passfield: new_pass}
    s.update(**d) #this saves new password in plain text; why?? 
    return

1 Ответ

0 голосов
/ 13 октября 2011

По умолчанию в поле пароля используется валидатор CRYPT () для хеширования пароля.Однако валидаторы применяются с отправкой форм (когда вызывается метод form.accepts ()), а не во время обычных операций .insert () и .update ().Перед вставкой нового пароля вы можете самостоятельно пропустить его через валидатор CRYPT поля auth_user.password:

d = {passfield: table_user[passfield].validate(new_pass)[0]}
s.update(**d)

Обновление: изменено requires[-1] на validate.

Обновление:Это не будет работать в текущей стабильной версии (1.99.3), но в следующем выпуске вы сможете выполнить:

d = {passfield: new_pass}
s.validate_and_update(**d)

Метод validate_and_update уже существует, но ранееон только запускал валидаторы для проверки ошибок без преобразования отправленных значений (поэтому не работал с валидаторами, такими как CRYPT, которые преобразуют отправленные значения).Обновленная версия теперь также преобразует значения, поэтому должна работать с CRYPT.

...