Per impostazione predefinita, le password vengono sottoposte a hash quando vengono inserite in auth_user
tabella (tramite un validatore di moduli associato al campo password). Quindi, non vuoi eseguire un inserimento SQL standard delle password in testo normale nella tabella (non solo non è sicuro, ma i successivi tentativi di accesso falliranno perché Auth
si aspetta password con hash).
Il modo più semplice per eseguire l'hashing quando si eseguono inserimenti in blocco è scorrere i record e inserirli ciascuno utilizzando .validate_and_insert
metodo. Questo eseguirà tutti i validatori di campo (che comporteranno l'hashing delle password) e tutti i record che non superano la convalida semplicemente non verranno inseriti (quindi, ad esempio, un nome utente duplicato non verrà inserito perché non riuscirà la convalida).
for user in db(db.user).select():
db.auth_user.validate_and_insert(username=user.username, password=user.password)
Sebbene il processo di convalida rifiuterà automaticamente eventuali nomi utente duplicati, se prevedi molti duplicati e desideri migliorare l'efficienza, puoi prima selezionare solo i non duplicati da user
tabella:
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)
Inoltre, nota che per impostazione predefinita, auth_user
la tabella richiede valori nel first_name
, last_name
e email
campi (ed è necessario un indirizzo email valido per alcuni dei Auth
funzionalità, come la reimpostazione della password). Quindi, dovresti pianificare di compilare anche quei campi, o altrimenti impostare i loro requires
attributi a None
quindi la convalida non fallisce. Ad esempio:
db.auth_user.first_name.requires = None
Un'altra opzione è definire un auth_user
personalizzato tabella.