Som standard hashas lösenord när de infogas i auth_user
tabell (via en formulärvalidator kopplad till lösenordsfältet). Så, du vill inte göra en standard SQL-infogning av vanlig textlösenord i tabellen (inte bara är det osäkert, utan efterföljande försök till inloggning kommer att misslyckas eftersom Auth
förväntar sig hashade lösenord).
Det enklaste sättet att få hashningen gjort när du gör massinsättningar är att gå igenom posterna och infoga var och en med hjälp av .validate_and_insert
metod. Detta kommer att köra alla fältvaliderare (vilket kommer att resultera i att lösenorden hashas), och alla poster som misslyckas med validering kommer helt enkelt inte att infogas (så till exempel kommer ett dubblett användarnamn inte att infogas eftersom det kommer att misslyckas med valideringen).
for user in db(db.user).select():
db.auth_user.validate_and_insert(username=user.username, password=user.password)
Även om valideringsprocessen automatiskt avvisar alla dubbletter av användarnamn, om du förväntar dig många dubbletter och vill förbättra effektiviteten, kan du först välja de icke-duplicerade från user
tabell:
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)
Observera också att auth_user
som standard Tabellen kräver värden i first_name
, last_name
och email
fält (och en giltig e-postadress krävs för en del av Auth
funktionalitet, som att återställa lösenordet). Så du bör antingen planera att fylla i dessa fält också, eller på annat sätt ställa in deras requires
attribut till None
så valideringen misslyckas inte. Till exempel:
db.auth_user.first_name.requires = None
Ett annat alternativ är att definiera en anpassad auth_user
bord.