Při prvním přihlášení po registraci nedohledá UserManager uživatele

kuon
Člen | 17
+
0
-

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 | 761
+
0
-

@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
+
0
-

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
+
+1
-

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í…