Som standard hashes adgangskoder, når de indsættes i auth_user
tabel (via en formularvalidator tilknyttet adgangskodefeltet). Så du ønsker ikke at lave en standard SQL-indsættelse af almindelig tekstadgangskoder i tabellen (ikke kun er det usikkert, men efterfølgende forsøg på login vil mislykkes, fordi Auth
forventer hashed adgangskoder).
Den nemmeste måde at få hashing udført, når du laver masseindsættelser, er at gå gennem posterne og indsætte hver enkelt ved hjælp af .validate_and_insert
metode. Dette vil køre alle feltvalidatorerne (hvilket vil resultere i, at adgangskoderne hash), og alle poster, der mislykkes i valideringen, vil simpelthen ikke blive indsat (så f.eks. vil et dublet brugernavn ikke blive indsat, fordi det vil mislykkes i valideringen).
for user in db(db.user).select():
db.auth_user.validate_and_insert(username=user.username, password=user.password)
Selvom valideringsprocessen automatisk vil afvise eventuelle dubletter af brugernavne, kan du, hvis du forventer mange dubletter og ønsker at forbedre effektiviteten, først kun vælge de ikke-duplikater fra user
tabel:
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)
Bemærk også, at auth_user
som standard tabel kræver værdier i first_name
, last_name
og email
felter (og en gyldig e-mailadresse er nødvendig for nogle af Auth
funktionalitet, såsom nulstilling af adgangskoden). Så du bør enten planlægge at udfylde disse felter også, eller på anden måde indstille deres requires
attributter til None
så validering fejler ikke. For eksempel:
db.auth_user.first_name.requires = None
En anden mulighed er at definere en brugerdefineret auth_user
tabel.