Domyślnie hasła są haszowane po wstawieniu do auth_user tabeli (poprzez walidator formularzy powiązany z polem hasła). Więc nie chcesz robić standardowego wstawiania SQL haseł w postaci zwykłego tekstu do tabeli (jest to nie tylko niepewne, ale kolejne próby logowania kończą się niepowodzeniem, ponieważ Auth oczekuje zaszyfrowanych haseł).
Najłatwiejszym sposobem wykonania haszowania podczas wstawiania zbiorczego jest przechodzenie przez pętlę rekordów i wstawianie każdego z nich za pomocą .validate_and_insert metoda. Spowoduje to uruchomienie wszystkich walidatorów pól (co spowoduje zahaszowanie haseł), a wszelkie rekordy, które nie przejdą weryfikacji, po prostu nie zostaną wstawione (więc na przykład zduplikowana nazwa użytkownika nie zostanie wstawiona, ponieważ nie powiedzie się weryfikacja).
for user in db(db.user).select():
db.auth_user.validate_and_insert(username=user.username, password=user.password)
Chociaż proces walidacji automatycznie odrzuci wszystkie zduplikowane nazwy użytkowników, jeśli spodziewasz się wielu duplikatów i chcesz poprawić wydajność, możesz najpierw wybrać tylko nieduplikaty od user tabela:
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)
Pamiętaj też, że domyślnie auth_user tabela wymaga wartości w first_name , last_name i email pola (i poprawny adres e-mail jest potrzebny dla niektórych Auth funkcje, takie jak resetowanie hasła). Dlatego powinieneś albo zaplanować wypełnienie tych pól, albo w inny sposób ustawić ich requires atrybuty na None więc walidacja nie kończy się niepowodzeniem. Na przykład:
db.auth_user.first_name.requires = None
Inną opcją jest zdefiniowanie niestandardowego auth_user tabeli.