在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
答案 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。