sql >> Databáze >  >> RDS >> Mysql

vložte nějaké n-tice do tabulky ve web2py

Ve výchozím nastavení jsou hesla při vložení do auth_user hašována tabulky (prostřednictvím validátoru formuláře spojeného s polem hesla). Nechcete tedy provádět standardní SQL vkládání hesel ve formátu prostého textu do tabulky (nejen, že to není bezpečné, ale následné pokusy o přihlášení selžou, protože Auth očekává hashovaná hesla).

Nejjednodušší způsob, jak provést hašování při hromadném vkládání, je projít záznamy a každý z nich vložit pomocí .validate_and_insert metoda. Tím se spustí všechny validátory polí (což bude mít za následek hašování hesel) a záznamy, které selžou při ověření, se jednoduše nevloží (takže například nebude vloženo duplicitní uživatelské jméno, protože ověření selže).

for user in db(db.user).select():
    db.auth_user.validate_and_insert(username=user.username, password=user.password)

Ačkoli proces ověření automaticky odmítne všechna duplicitní uživatelská jména, pokud očekáváte hodně duplicitních jmen a chcete zlepšit efektivitu, můžete nejprve vybrat pouze duplicitní z user tabulka:

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)

Všimněte si také, že ve výchozím nastavení je auth_user tabulka vyžaduje hodnoty v first_name , last_name a email polí (a pro některé Auth je potřeba platná e-mailová adresa funkce, jako je resetování hesla). Měli byste tedy buď naplánovat vyplnění těchto polí, nebo jinak nastavit jejich requires atributy na None takže ověření se nezdaří. Například:

db.auth_user.first_name.requires = None

Další možností je definovat vlastní auth_user tabulka.



  1. Jak převést případ řetězce v PostgreSQL

  2. postgres - CHYBA:operátor neexistuje

  3. Poskytovatel dat OleDB nelze nalézt VBA/Excel

  4. Jak vrátit Unixové časové razítko v Oracle