De forma predeterminada, las contraseñas se codifican cuando se insertan en el auth_user
(a través de un validador de formulario asociado con el campo de contraseña). Por lo tanto, no desea realizar una inserción SQL estándar de las contraseñas de texto sin formato en la tabla (no solo es inseguro, sino que los intentos posteriores de inicio de sesión fallarán porque Auth
está esperando contraseñas cifradas).
La forma más fácil de realizar el hashing cuando se realizan inserciones masivas es recorrer los registros e insertar cada uno usando .validate_and_insert
método. Esto ejecutará todos los validadores de campo (lo que dará como resultado que las contraseñas sean codificadas), y cualquier registro que falle la validación simplemente no se insertará (por lo tanto, por ejemplo, no se insertará un nombre de usuario duplicado porque fallará la validación).
for user in db(db.user).select():
db.auth_user.validate_and_insert(username=user.username, password=user.password)
Aunque el proceso de validación rechazará automáticamente cualquier nombre de usuario duplicado, si espera muchos duplicados y desea mejorar la eficiencia, primero puede seleccionar solo los no duplicados del user
tabla:
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)
Además, tenga en cuenta que, de forma predeterminada, el auth_user
la tabla requiere valores en el first_name
, last_name
y email
(y se necesita una dirección de correo electrónico válida para algunos de los Auth
funcionalidad, como restablecer la contraseña). Por lo tanto, debe planear completar esos campos también o establecer sus requires
atributos a None
por lo que la validación no falla. Por ejemplo:
db.auth_user.first_name.requires = None
Otra opción es definir un auth_user
personalizado mesa.