Při prvním přihlášení po registraci nedohledá UserManager uživatele
- kuon
- Člen | 17
Ahoj,
prosím o radu, protože už fakt nevím, kudy kam. Mám registrační
formulář, kterým uložím nového uživatele do DB a pošlu mu autorizační
e-mail. On proklikne, vše ověřím, do DB uložím změnu statusu,
přesměruji ho na úvodní stránku s flashmessage, že vše proběhlo
v pořádku a může se přihlásit. Problém je, že z nějakého důvodu mi
UserManager POUZE při prvním přihlášení nenajde uživatele v DB a vyhodí
výjimku. Když zaktualizuji stránku a udělám stejný postup přihlášení
ještě jednou, tak vše funguje bez problémů. Přihlašování i registraci
provádím ve stejné komponentě. Nemohu na to přijít, protože jak už jsem
psal chyba se vyskytne pouze při první přihlášení po registraci a všechny
ostatní už jsou v pořádku.
Nenapadne někoho, kde by mohla být chyba?
- m.brecher
- Generous Backer | 873
@kuon
UserManager POUZE při prvním přihlášení nenajde uživatele v DB
Takže uživatel proklikne odkaz v emailu, dostane se na stránku, kde se ověřuje a ukládá status do databáze a přesměruje se na stránku, kde je přihlašovací formulář, zde uživatel vyplní email/username podle kterého se vyhledává v databázi, formulář odešle, ale UserManager uživatele nenajde.
Pošli kód UserManagera + kterou výjimku vyhazuje, aby se dalo k tomu víc říct.
Můžeš také zkusit pomocí bdump() si vytrasovat, zda username/email skutečně do příslušných míst v UserManageru dorazí.
- kuon
- Člen | 17
Kód jsem sem nevkládal, protože na něm není podle mě co vyčíst a hlavně je pro jakékoliv jiné přihlášení než to první po registraci jinak plně funkční. Můj UserManager:
/**
* Performs an authentication.
* @throws Nette\Security\AuthenticationException
*/
public function authenticate($uziv_kod): Nette\Security\IIdentity
{
$uziv = $this->db->table('uzivatele')->where('uziv_kod', $uziv_kod)->fetch()->toArray();
unset($uziv["uziv_heslo"]);
return new Nette\Security\Identity($uziv["uziv_id"], explode("‡", $uziv["uziv_role"]), $uziv);
}
Ověření hesla a zpracování výjimek provádím samostatně ještě před předáním do UserManageru ( $this->user->login($uziv[‚uziv_kod‘]);) , kam si už pošlu jen kód uživatele pro dohledání v DB. Záznam tam je, protože jinak by mi to vyhodilo chybu už při dohledání podle e-mailu nebo ověření správnosti hesla.
EDIT: Děkuji za navedení. přes bdump() jsem zjistil, že mi to tam od někud posílá přímo e-mail místo kódu uživatele. To bylo původní chování starého skriptu, ale nemohu nikde najít, že by mi to někde zůstalo. Cache jsem samozřejmě smazal. Jdu hledat. Ještě jednou díky.
Editoval kuon (9. 10. 2023 12:28)
- kuon
- Člen | 17
Tak už to mám. V BasePresenteru provádím kontrolu aktuálnosti údajů uživatele a pokud má starší ID aktualizace (což nový uživatel má), tak mu zaktualizuju ID, odhlasím a zase přihlásím. No a tohle přihlášení v BasePresenteru mi zůstalo ve starém formátu. Stupidní chyba a mnoho hodiny zoufalství…