По подразбиране паролите се хешират, когато се вмъкнат в auth_user таблица (чрез валидатор на формуляр, свързан с полето за парола). Така че не искате да правите стандартно SQL вмъкване на паролите с обикновен текст в таблицата (това не само е несигурно, но последващите опити за влизане ще бъдат неуспешни, защото Auth очаква хеширани пароли).
Най-лесният начин да извършите хеширането, когато правите групови вмъквания, е да преминете през записите и да вмъкнете всеки един с помощта на .validate_and_insert метод. Това ще стартира всички валидатори на полета (което ще доведе до хеширане на паролите) и всички записи, които не са преминали проверката, просто няма да бъдат вмъкнати (така че, например, дублирано потребителско име няма да бъде вмъкнато, защото няма да премине проверката).
for user in db(db.user).select():
db.auth_user.validate_and_insert(username=user.username, password=user.password)
Въпреки че процесът на валидиране автоматично ще отхвърли всички дублиращи се потребителски имена, ако очаквате много дубликати и искате да подобрите ефективността, можете първо да изберете само недубликатите от user таблица:
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)
Също така имайте предвид, че по подразбиране auth_user таблицата изисква стойности в first_name , last_name и email полета (и е необходим валиден имейл адрес за някои от Auth функционалност, като нулиране на паролата). Така че трябва или да планирате да попълните и тези полета, или по друг начин да зададете техните requires атрибути към None така че валидирането не се проваля. Например:
db.auth_user.first_name.requires = None
Друга опция е да дефинирате персонализиран auth_user таблица.