Event na neplatne prihlasenie

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
marioff
Člen | 69
+
0
-

Ahojte,

urobil som si (resp. mam hotovu polovicku) Listener kde pocuvam ci sa niekto prihlasil, cim vytvaram zoznam prihlaseni daneho uzivatela. Ak ano ulozim jeho prihlasenie. Uspesne prihlasenie viem zistit: Nette\Security\User::onLoggedIn . Ale ani za svet neviem zistit ci uzivatel nezadal zle heslo. Vie mi niekto poradit aspon nastrel ako to dosiahnut?

bazo
Člen | 620
+
0
-

ved to vies zistit na mieste kde overujes heslo.

marioff
Člen | 69
+
0
-

ano , overuje sa to v authenticatore ktory rozsiruje Nette\Security\IAuthenticator.. len tam ked si vytvorim

/** @var array */
public $onErrorPassword;

a zavolam po overeni nespravneho hesla: $this->onErrorPassword();

tak mi vrati chybu ze ta metoda nie je definovana :(

David Matějka
Moderator | 6445
+
0
-

dedis Nette\Object?

marioff
Člen | 69
+
0
-

nie, tam sa implementuje

class PasswordAuthenticator implements Nette\Security\IAuthenticator

zatial sa len ucim nette, takze neviem uplne presne ci to tu bude fungovat.. inde bez problemov

Jan Mikeš
Člen | 771
+
+2
-

A co ti brani tam napsat extends Nette\Object. Implementace rozhrani nijak nevylucuje dedicnost – to neni feature nette ale bezna vec OOP.

marioff
Člen | 69
+
0
-

aha, uz to funguje.. som si to vobec neuvedomil.. musim sa este poriadne doucit OOP

bazo
Člen | 620
+
+2
-

$this->onErrorPassword(); je volanie metody a public $onErrorPassword; je property, nemozes len tak bez nejakej magie zavolat funkciu ulozenu v property

preto aj v nette mas taketo zapisy
public $onErrorPassword = [];
$obj->onErrorPassword[] = callback

a potom napr. v tom objekte
foreach($this->onErrorPassword as $callback) {
$callback();
}

toto ti bude fungovat vzdy aj bez magickeho nette object

marioff
Člen | 69
+
0
-

bazo: uz tomu trochu rozumiem – v aplikacii sa pouziva Kdyby Events, tak som chcel aby bol Listener v samostatnom subore v Modeli aby to bolo vsetko na jednej hromadke (lebo tam sa pocuva aj uspesne prihlasenie).. ale zatial sa ucim tak este tomu nerozumiem dokonale, snad niekedy budem radit ja ostatnym :)

bazo
Člen | 620
+
0
-

v tom callbacku mozes kludne dispatchnut aj event cez kdyby a mat listener zvlast, len to uz je trosku komplikovane.
neviem ci kdyby nemeni vsetky onNieco na svoje vlastne eventy.

ale kazdopadne v tom authenticatore mozes spravit nieco ako

<?php
if($password !== $expected) {
	$this->evm->dispatchEvent('WRONG_PASWORD_EVENT', $args)
}
?>
Filip Procházka
Moderator | 4668
+
+1
-

@marioff pokud chceš vědět jak fungují kdyby/events, tak koukni na tohle video :)

marioff
Člen | 69
+
+1
-

Filip Procházka napsal(a):

@marioff pokud chceš vědět jak fungují kdyby/events, tak koukni na tohle video :)

jeeee, super video , si ma inspiroval aj s tym message queue … velmi pekne dakujem

Editoval marioff (19. 12. 2014 15:51)

marioff
Člen | 69
+
0
-

nechcem kvoli tomuto zakladat novu diskusiu.. opitam sa tu:

je mozne nejak pocuvat iba zmenu jednej property v entite (Doctrine 2)? nechcem to riesit v listeneri cez onPreUpdate, lebo zbytocne sa potom bude volat pri akejkolvek zmene v entite, aj takej co sa v danom listeneri riesit nebude..

Editoval marioff (20. 12. 2014 20:17)

Filip Procházka
Moderator | 4668
+
+1
-

@marioff přímo Doctrine umí listenery na konkrétní entity, stačí ji dát do annotace a pak zaregistrovat jako službu, Kdyby/Doctrine zařídí, aby se tam ta třída z DIC dostala.

Naslouchat ale na jednu konkrétní property moc dobře nejde, je to maličko složitější. Můžeš si o tom počíst tady http://docs.doctrine-project.org/…olicies.html – tohle s tím nesouvisí úplně na 100%, ale myslím že je to relevantní.