По подразбиране паролите се хешират, когато се вмъкнат в 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
таблица.