Standaard worden wachtwoorden gehasht wanneer ze worden ingevoerd in de auth_user
tabel (via een formuliervalidator die is gekoppeld aan het wachtwoordveld). U wilt dus geen standaard SQL-invoeging van de wachtwoorden in platte tekst in de tabel doen (niet alleen is dat onveilig, maar volgende pogingen om in te loggen zullen mislukken omdat Auth
verwacht gehashte wachtwoorden).
De eenvoudigste manier om de hashing uit te voeren wanneer u bulk-inserts doet, is door de records te doorlopen en ze allemaal in te voegen met behulp van de .validate_and_insert
methode. Hierdoor worden alle veldvalidators uitgevoerd (waardoor de wachtwoorden worden gehasht), en alle records die de validatie niet doorstaan, worden gewoon niet ingevoegd (zo wordt er bijvoorbeeld geen dubbele gebruikersnaam ingevoegd omdat de validatie mislukt).
for user in db(db.user).select():
db.auth_user.validate_and_insert(username=user.username, password=user.password)
Hoewel het validatieproces automatisch dubbele gebruikersnamen afwijst, kunt u, als u veel dubbele gebruikers verwacht en de efficiëntie wilt verbeteren, eerst alleen de niet-dubbele gebruikersnamen van de user
selecteren. tafel:
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)
Merk ook op dat standaard de auth_user
tabel vereist waarden in de first_name
, last_name
, en email
velden (en een geldig e-mailadres is nodig voor sommige van de Auth
functionaliteit, zoals het opnieuw instellen van het wachtwoord). U moet dus ofwel van plan zijn om die velden ook in te vullen, of anderszins hun requires
in te stellen attributen aan None
dus validatie mislukt niet. Bijvoorbeeld:
db.auth_user.first_name.requires = None
Een andere optie is om een aangepaste auth_user
te definiëren tafel.