通过导入csv文件插入的用户无法登录web2py

时间:2014-08-15 10:46:32

标签: csv web2py

我将用户插入到auth_user表中,其中包含两个字段用户名和密码的csv文件。 用户已成功插入到auth_user表中,但我无法使用用户名和密码登录.registration_key为null。为什么用户无法登录? 谢谢!

1 个答案:

答案 0 :(得分:1)

回答here。答案复制如下:

默认情况下,密码在插入auth_user表时会经过哈希处理(通过与密码字段关联的表单验证程序)。因此,您不希望在表中执行纯文本密码的标准SQL插入(不仅是不安全,而且后续的登录尝试将失败,因为Auth期望散列密码)。

执行批量插入时完成散列的最简单方法是遍历记录并使用.validate_and_insert方法插入每个记录。这将运行所有字段验证器(这将导致密码被散列),并且任何未通过验证的记录将不会被插入(因此,例如,不会插入重复的用户名,因为它将无法通过验证)。

for user in db(db.user).select():
    db.auth_user.validate_and_insert(username=user.username, password=user.password)

虽然验证过程会自动拒绝任何重复的用户名,但如果您需要大量重复项并希望提高效率,则可以先从user表中选择非重复项:

users = db(~db.user.username.belongs(db()._select(db.auth_user.username))).select()
for user in users:
    db.auth_user.validate_and_insert(username=user.username, password=user.password)

另请注意,默认情况下,auth_user表格确实需要first_namelast_nameemail字段中的值(并且需要有效的电子邮件地址一些Auth功能,例如重置密码)。因此,您应该计划填写这些字段,或者将其requires属性设置为None,以便验证不会失败。例如:

db.auth_user.first_name.requires = None

另一个选择是定义自定义auth_user表。