Jak změnit login metodu na vlastní

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

Ahoj,

potřebuju změnit login metodu, protože potřebuju posílat více dat než jen id a password. Ale nechce se mi šahat přímo do Usera, koukal jsem, že stačí zaregistrovat vlastní třídu do configu a podědit jí. Nicméně tohle je celá metoda login

	public function login($id = NULL, $password = NULL)
	{
		$this->logout(TRUE);
		if (!$id instanceof IIdentity) {
			$id = $this->getAuthenticator()->authenticate(func_get_args());
		}
		$this->storage->setIdentity($id);
		$this->storage->setAuthenticated(TRUE);
		$this->onLoggedIn($this);
	}

nechápu proč se $id testuje oproti instanci.. Proč ? vždyť to id vždy posílám já ne ?
Jde mi o to když tu metodu budu přepisovat, jestli to $id můžu úplně vyhodit.

Protože jestli to chápu, tak když je user přihlášenej tak nette si samo volá metodu login a místo $id mu posílá už tu Identitu. A pokud volám login ručně tak si vytoří Identitu z id a passw.

Editoval kleinpetr (1. 5. 2015 12:19)

kleinpetr
Člen | 480
+
0
-

Tak už jsem to vyřešil:

class MyCustomUser extends User
{
        public function login($id = NULL, $credentials = NULL){
            $this->logout(TRUE);
            if (!$id instanceof IIdentity) {
                $id = $this->getAuthenticator()->authenticate($credentials);
            }
            $this->storage->setIdentity($id);
            $this->storage->setAuthenticated(TRUE);
            $this->onLoggedIn($this);
        }
}

a v presenteru pak

$this->getUser()->login(NULL, $credentials);

Jelikož přesně nevím jak se tam chová to ID tak jsem ho tam nechal a naplňuji ho null :)

jiri.pudil
Nette Blogger | 1029
+
+1
-

Když je uživatel přihlášený, už se žádný login nevolá. Ta kontrola je tam proto, abys mohl metodě login poslat přímo identitu, čímž se obejde autentizace a rovnou to přihlásí uživatele s tou identitou. Jinak když se podíváš, volá se tam authenticate(func_get_args()), tzn. všechno, co pošleš do metody login, se v nezměněné podobě (EDIT: to je samozřejmě blbost, argumenty se předají v poli) předá autentikátoru. Takže dokonce nemusíš vůbec nic přepisovat, prostě si tu metodu zavolej s tím, co potřebuješ.

Editoval jiri.pudil (1. 5. 2015 12:36)

kleinpetr
Člen | 480
+
0
-

Díky za vysvětlení :)

Editoval kleinpetr (1. 5. 2015 12:37)