Situace, kdy se vám výše popsané stane, jsou různé. Ono stačí, aby klient změnil heslo, pak se o web nestaral a po nějaké době zjistil, že potřebuje nějakou změnu. Nedovede se ale přihlásit a hosting zablokoval posílání zpráv kvůli spamu. Nebo je zapnutý odesílač přes SMTP, který je špatně nastavený. Je zkrátka mnoho příčin, kdy potřebujete zresetovat heslo do Drupalu a nejde to klasickou cestou.
V takovém případě vám nezbude nic jiného než sáhnout do databáze. Nebo jinak. Napadají mě dvě možnosti. Programově vytvořit jiného uživatele, přidělit mu administrátorská práva, přihlásit se s ním a heslo pro hlavního správce tam resetovat.
V tomto článku se ale zaměřím na způsob, jak získat zahashovanou podobu hesla, kterou pak můžete vložit do databáze.
Jak změnit heslo v databázi v Drupalu 6
Drupal 6 je sice už historie, není podporován, ale přesto se na mě obrací řada lidí, kteří jej chtějí převést na vyšší verzi. Možná naopak právě proto, nevím. Každopádně pokud byste popsanou situaci řešili v Drupalu 6, je to velmi snadné.
V jeho době byla hesla uložena jen jako kalkulace md5. Stačí tedy následující:
Jak na změnu hesla v databázi Drupalu 7
MD5 není samo o sobě žádná bezpečnostní výhra, takže s příchodem Drupalu 7 už došlo ke změně a takto jednoduše nové heslo do databáze nedostanete.
K vytváření zahashovaného hesla používá Drupal 7 funkci user_hash_password(). Kouknete-li do nápovědy na Drupal API, tak zjistíte, že tato funkce kryptuje heslo pomocí SHA-512 a tzv. jej osolí. Onu sůl už do nějakých generátorů moc jednoduše nedostanete, takže si musíte poradit jednoduchým kusem kódu.
Vytvořte si v kořenové složce Drupalu nový soubor heslo.php a vložte do něj následující kód.
<?php define('DRUPAL_ROOT', getcwd()); require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); require('includes/password.inc'); echo user_hash_password('TADY_NAPIŠ_SVOJE_NOVÉ_HESLO'); die(); menu_execute_active_handler();
Poté, co otevřete v prohlížeči adresawebu/heslo.php, zobrazí se vám zashashovaná podoba hesla. A tu již můžete přes databázového správce vložit do tabulky users a sloupečku pass na řádku, který se týká konkrétního uživatele.
Případně to můžete udělat přímo v kódu a možná o něco elegantněji. Stačí nahradit řádky s napojením password.inc a zobrazením hesla za:
$account = user_load(1); $edit['pass'] = 'NOVE HESLO'; user_save($account, $edit);
Jak to má s heslem v databázi Drupal 8?
Na závěr samozřejmě nesmím zapomenout na Drupal 8. Zřejmě by se to dalo vyřešit opět načtením nějaké entity uživatele na základě jeho identifikátoru a poté uložením přes $user->setPassword(), nicméně je tu elegantnější řešení. Ve složce core/scripts najdete soubor password-hash.sh. Stačí jej na příkazovém řádku spustit a jako parametr uvést nové heslo. Skript vám vrátí jeho zahashovanou podobu, kterou můžete vložit do databáze.
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.
Podobné články
Komentáře k článku
Neznám = neexistuje? ;-)
Dobrý den možná se ptám jako úplný analfabet, ale kde najdu složku resp. název dokumentu kde změním heslo
Drupal 7 mám přístup pouze přes FTP. Asi jsem si heslo špatně zkopíroval a nyní se nemohu přihlásit :-(
1.
$account = user_load(1);
2.
$edit['pass'] = 'NOVE HESLO';
3.
user_save($account, $edit);
Děkuji za odpověď
Dobrý den, jednoduše. Dejte to třeba na konec index.php a načtěte web. Tím se to aktivuje. Pak to odmažte a je to.
Děkuji mnohokrát
Pro Drupal6 neni potreba hledat zadny "kalkulator MD5" protoze tu funkci umi samo MySQL(neznam nikoho kdo by pouzival Drupal na SQLite)...