Por padrão, as senhas são criptografadas quando inseridas no
auth_user
table (através de um validador de formulário associado ao campo de senha). Portanto, você não deseja fazer uma inserção SQL padrão das senhas de texto simples na tabela (não apenas isso é inseguro, mas as tentativas subsequentes de login falharão porque Auth
está esperando senhas com hash). A maneira mais fácil de fazer o hashing ao fazer inserções em massa é percorrer os registros e inserir cada um usando o
.validate_and_insert
método. Isso executará todos os validadores de campo (o que resultará no hash das senhas) e quaisquer registros que falharem na validação simplesmente não serão inseridos (assim, por exemplo, um nome de usuário duplicado não será inserido porque falhará na validação). for user in db(db.user).select():
db.auth_user.validate_and_insert(username=user.username, password=user.password)
Embora o processo de validação rejeite automaticamente qualquer nome de usuário duplicado, se você espera muitas duplicatas e deseja melhorar a eficiência, você pode primeiro selecionar apenas os não duplicados do
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)
Além disso, observe que, por padrão, o
auth_user
tabela requer valores no first_name
, last_name
e email
campos (e um endereço de e-mail válido é necessário para alguns dos campos Auth
funcionalidade, como redefinir a senha). Portanto, você deve planejar preencher esses campos também ou definir seus requires
atributos para None
para que a validação não falhe. Por exemplo:db.auth_user.first_name.requires = None
Outra opção é definir um
auth_user
personalizado tabela.