Po přihlášení prázdná identity

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

Zdravícko,

chvíli jsem nedělal s nette a už mám problém. Jedná se o přihlášení – po přihlášení mám v identity jen „guest“ a dost dobře nevm proč, můžete mi prosím poradit?

<?php
public function loginFormSubmitted($form)
	{
        $values = $form->values;
        if ($values['remember']) {
            $this->getUser()->setExpiration('+ 14 days', FALSE);
        } else {
            $this->getUser()->setExpiration('+ 20 minutes', TRUE);
        }
        $this->getUser()->login($values['username'], $values['password']);

        $this->flashMessage('Byl jste úspěšně přihlášen.');

        $u = Environment::getUser();
        dump($u);
        //$this->redirect(':Admin:Homepage:default');
	}
?>

a usersmodel:

<?php
public function authenticate(array $credentials)
	{
		$username = $credentials[self::USERNAME];
		$password = md5($credentials[self::PASSWORD]);

		$row = dibi::fetch('SELECT * FROM user WHERE login=%s', $username);

		if (!$row) {
			throw new AuthenticationException("živatel '$username' nebyl nalezen.", self::IDENTITY_NOT_FOUND);
		}

		if ($row->password !== $password) {
			throw new AuthenticationException("Špatné heslo, zkuste jiné.", self::INVALID_CREDENTIAL);
		}

		unset($row->password);
        $identity = new Identity($row->id, $row->role, $row);

		return $identity;
	}
?>
westrem
Člen | 398
+
0
-

Prva otazka, co mas v $this->getUser()? Ako to inicializujes?

Editoval westrem (19. 1. 2011 1:40)

Mesiah
Člen | 240
+
0
-

Co se týká metody loginFormSubmitted, tak tam nijak neiinicializuju, jedna se jen o počeštěný Login presenter přímo v distribuci to stejný pro authenticate, jde o počeštěný model UsersModel…
A co tam mám – mám tam objekt Identity, ale s uživatelem Guest, ačkoli UsersModel vytvoří instanci Identity a vrátí ji…

Tharos
Člen | 1030
+
0
-

To je opravdu zvláštní, v rychlosti jsem to ověřil v sandboxu a funguje to korektně.

Jen mě tak napadlo – neinterpretuješ špatně ten dump? Ono totiž když si dumpneš třídu User, výstup vypadá následovně:

NUser(8) {
   "guestRole" => "guest" (5)
   "authenticatedRole" => "authenticated" (13)
   "onLoggedIn" => NULL
   "onLoggedOut" => NULL
   ...

To questRole nahoře ale neznamená, že v Identity je aktuálně role quest. Vyzkoušej spíš dump(Environment::getUser()->getIdentity()).

Editoval Tharos (19. 1. 2011 10:03)

fejtis
Člen | 16
+
0
-

Zdravím, mám podobný problém jako kolega ale mě objekt Identity vrací pouze NULL.

    public function loginFormSubmitted(AppForm $form){
        if($form->isSubmitted()){
            $myAuth = new \MyAuthenticator();
            $values = $form->getValues();
            $username = $values['email'];
            $password = $values['password'];
            try{
                $myAuth->authenticate(array($username, $password));
                //$this->redirect('Katalog:default');
            }
            catch (AuthenticationException $ex){

            }
        }
    }

class MyAuthenticator extends Nette\Object implements Nette\Security\IAuthenticator {

    public function authenticate(array $credentials) {

        $username = $credentials[self::USERNAME];
        $password = sha1($credentials[self::PASSWORD]);

        $row = dibi::fetch("SELECT id, email, password FROM eshop_users WHERE email = '$username'");

        if(!$row) // user not found
            throw new AuthenticationException('Uživatel '.$username.' neexistuje', self::IDENTITY_NOT_FOUND);

        if($row->password !== $password) // hesla se neshoduji
                throw new AuthenticationException ('Zadali jste špatné heslo', self::INVALID_CREDENTIAL);

        $identity = new Identity($row->id, 'guest', array(
            'email' => $row->email
        ));

        return $identity;
    }

a dumpuju pres dump(\Nette\Environment::getUser()->getIdentity());

Pres podminky prihlaseni to normalne projde, ale identita se nenastavi.

Diky za pomoc