Ve výchozím nastavení jsou hesla při vložení do auth_user
hašována tabulky (prostřednictvím validátoru formuláře spojeného s polem hesla). Nechcete tedy provádět standardní SQL vkládání hesel ve formátu prostého textu do tabulky (nejen, že to není bezpečné, ale následné pokusy o přihlášení selžou, protože Auth
očekává hashovaná hesla).
Nejjednodušší způsob, jak provést hašování při hromadném vkládání, je projít záznamy a každý z nich vložit pomocí .validate_and_insert
metoda. Tím se spustí všechny validátory polí (což bude mít za následek hašování hesel) a záznamy, které selžou při ověření, se jednoduše nevloží (takže například nebude vloženo duplicitní uživatelské jméno, protože ověření selže).
for user in db(db.user).select():
db.auth_user.validate_and_insert(username=user.username, password=user.password)
Ačkoli proces ověření automaticky odmítne všechna duplicitní uživatelská jména, pokud očekáváte hodně duplicitních jmen a chcete zlepšit efektivitu, můžete nejprve vybrat pouze duplicitní z user
tabulka:
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)
Všimněte si také, že ve výchozím nastavení je auth_user
tabulka vyžaduje hodnoty v first_name
, last_name
a email
polí (a pro některé Auth
je potřeba platná e-mailová adresa funkce, jako je resetování hesla). Měli byste tedy buď naplánovat vyplnění těchto polí, nebo jinak nastavit jejich requires
atributy na None
takže ověření se nezdaří. Například:
db.auth_user.first_name.requires = None
Další možností je definovat vlastní auth_user
tabulka.