Standardmäßig werden Passwörter gehasht, wenn sie in auth_user
eingefügt werden Tabelle (über einen Formularvalidator, der dem Passwortfeld zugeordnet ist). Sie möchten also keine Standard-SQL-Einfügung der Klartext-Passwörter in die Tabelle vornehmen (das ist nicht nur unsicher, sondern nachfolgende Anmeldeversuche schlagen fehl, weil Auth
erwartet gehashte Passwörter).
Der einfachste Weg, das Hashing bei Masseneinfügungen durchzuführen, besteht darin, die Datensätze zu durchlaufen und jeden einzelnen mithilfe von .validate_and_insert
einzufügen Methode. Dadurch werden alle Feldvalidatoren ausgeführt (was dazu führt, dass die Passwörter gehasht werden), und alle Datensätze, bei denen die Validierung fehlschlägt, werden einfach nicht eingefügt (so dass beispielsweise ein doppelter Benutzername nicht eingefügt wird, da die Validierung fehlschlägt).
for user in db(db.user).select():
db.auth_user.validate_and_insert(username=user.username, password=user.password)
Obwohl der Validierungsprozess alle doppelten Benutzernamen automatisch ablehnt, können Sie, wenn Sie viele Duplikate erwarten und die Effizienz verbessern möchten, zuerst nur die Nicht-Duplikate von user
auswählen Tabelle:
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)
Beachten Sie außerdem, dass standardmäßig der auth_user
Tabelle erfordert Werte im first_name
, last_name
, und email
Felder (und für einige der Auth
ist eine gültige E-Mail-Adresse erforderlich Funktionen wie das Zurücksetzen des Passworts). Sie sollten also entweder planen, diese Felder ebenfalls auszufüllen, oder ihre requires
anderweitig festlegen Attribute auf None
die Validierung schlägt also nicht fehl. Zum Beispiel:
db.auth_user.first_name.requires = None
Eine weitere Option ist die Definition eines benutzerdefinierten auth_user
Tabelle.