sql >> Base de Datos >  >> RDS >> Mysql

inserte algunas tuplas en la tabla en web2py

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.