我将用户插入到auth_user表中,其中包含两个字段用户名和密码的csv文件。 用户已成功插入到auth_user表中,但我无法使用用户名和密码登录.registration_key为null。为什么用户无法登录? 谢谢!
答案 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_name
,last_name
和email
字段中的值(并且需要有效的电子邮件地址一些Auth
功能,例如重置密码)。因此,您应该计划填写这些字段,或者将其requires
属性设置为None
,以便验证不会失败。例如:
db.auth_user.first_name.requires = None
另一个选择是定义自定义auth_user
表。