Secara default, kata sandi di-hash ketika dimasukkan ke dalam auth_user
tabel (melalui validator formulir yang terkait dengan bidang kata sandi). Jadi, Anda tidak ingin melakukan penyisipan SQL standar dari kata sandi teks biasa ke dalam tabel (tidak hanya itu tidak aman, tetapi upaya login berikutnya akan gagal karena Auth
mengharapkan sandi yang di-hash).
Cara termudah untuk menyelesaikan hashing saat melakukan penyisipan massal adalah dengan mengulang catatan dan menyisipkan masing-masing menggunakan .validate_and_insert
metode. Ini akan menjalankan semua validator bidang (yang akan menghasilkan kata sandi yang di-hash), dan catatan apa pun yang gagal validasi tidak akan dimasukkan (jadi, misalnya, nama pengguna duplikat tidak akan dimasukkan karena akan gagal validasi).
for user in db(db.user).select():
db.auth_user.validate_and_insert(username=user.username, password=user.password)
Meskipun proses validasi akan secara otomatis menolak nama pengguna duplikat, jika Anda mengharapkan banyak duplikat dan ingin meningkatkan efisiensi, Anda dapat memilih yang bukan duplikat terlebih dahulu dari user
tabel:
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)
Perhatikan juga bahwa secara default, auth_user
tabel memang membutuhkan nilai dalam first_name
, last_name
, dan email
bidang (dan alamat email yang valid diperlukan untuk beberapa Auth
fungsionalitas, seperti mengatur ulang kata sandi). Jadi, Anda harus merencanakan untuk mengisi kolom tersebut juga, atau mengatur requires
atribut ke None
sehingga validasi tidak gagal. Misalnya:
db.auth_user.first_name.requires = None
Opsi lainnya adalah menentukan auth_user
khusus tabel.