web2py通过服务调用更改密码

时间:2011-10-13 09:11:45

标签: authentication web2py

在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 :(得分:0)

默认情况下,密码字段使用CRYPT()验证程序来散列密码。但是,验证器应用表单提交(当调用form.accepts()方法时),而不是在常规.insert()和.update()操作期间。在插入新密码之前,您可以自己将其传递给auth_user.password字段的CRYPT验证器:

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。