Par défaut, les mots de passe sont hachés lorsqu'ils sont insérés dans le auth_user
table (via un valideur de formulaire associé au champ mot de passe). Donc, vous ne voulez pas faire une insertion SQL standard des mots de passe en texte brut dans la table (non seulement cela n'est pas sécurisé, mais les tentatives de connexion ultérieures échoueront car Auth
attend des mots de passe hachés).
Le moyen le plus simple d'effectuer le hachage lors des insertions en bloc consiste à parcourir les enregistrements et à insérer chacun d'eux à l'aide de .validate_and_insert
méthode. Cela exécutera tous les validateurs de champs (ce qui entraînera le hachage des mots de passe), et tous les enregistrements qui échouent à la validation ne seront tout simplement pas insérés (ainsi, par exemple, un nom d'utilisateur en double ne sera pas inséré car il échouera à la validation).
for user in db(db.user).select():
db.auth_user.validate_and_insert(username=user.username, password=user.password)
Bien que le processus de validation rejette automatiquement tous les noms d'utilisateur en double, si vous vous attendez à beaucoup de doublons et souhaitez améliorer l'efficacité, vous pouvez d'abord sélectionner uniquement les non-doublons à partir de l'user
tableau :
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)
Notez également que par défaut, le auth_user
table nécessite des valeurs dans le first_name
, last_name
, et email
champs (et une adresse e-mail valide est nécessaire pour certains des champs Auth
fonctionnalité, telle que la réinitialisation du mot de passe). Donc, vous devez soit prévoir de remplir également ces champs, soit définir leurs requires
attribue à None
donc la validation n'échoue pas. Par exemple :
db.auth_user.first_name.requires = None
Une autre option consiste à définir un auth_user
personnalisé tableau.