Row does not contain primary user_id column data

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

PHP 5.4.3, Nette 2.0.7
Nazdar, mám problém s prihlasovaním užívateľov.

public function authenticate(array $credentials)
	{
		list($username, $password) = $credentials;
		$row = $this->users->findByName($username);

		if (!$row) {
			throw new Security\AuthenticationException('The username is incorrect.', self::IDENTITY_NOT_FOUND);
		}

		if ($row->password !== $this->calculateHash($password, $row->password)) {
			throw new Security\AuthenticationException('The password is incorrect.', self::INVALID_CREDENTIAL);
		}

		unset($row->password);
		return new Nette\Security\Identity($row->id, NULL, $row->toArray());
	}

Pri prihlasovaní nastane problém v poslednom riadku, vypíše:
Row does not contain primary user_id column data.
Vedel by mi niekto poradiť v čom môže byť problém? (stĺpce v tabuľke user: id(PK), , username (unique), password,… ) Za pomoc vopred ďakujem.

Editoval Tom1141 (20. 1. 2013 12:24)

vvoody
Člen | 910
+
0
-

Menil si práve štruktúru db? Ak áno tak zmaž cache.

Tom1141
Člen | 27
+
0
-

Bohužiaľ, problém to nevyriešilo.. Ale je pravda že som menil štruktúru DB, avšak zmenil som iba názvy atribútov entít.

castamir
Člen | 629
+
0
-

co ti vypíše dump($row)?

a co ti vrací metoda findByName? Instanci ActiveRow nebo něco jiného?

Editoval castamir (20. 1. 2013 12:55)

Tom1141
Člen | 27
+
0
-

findByName vyzerá nasledovne:

public function findByName($username)
	{
		return $this->findBy(array('username' => $username))->fetch();
	}

Som nováčik v Nette, základ práce s databázou a triedu Authenticator som založil na tutoriáli dostupnom na nette.org ‚Píšeme prvú aplikáciu‘.

castamir
Člen | 629
+
0
-

Fajn, zkusím to znovu. Co se ti vypíše, když upravíš kód té metody následovně

public function authenticate(array $credentials)
    {
        list($username, $password) = $credentials;
        $row = $this->users->findByName($username);

        if (!$row) {
            throw new Security\AuthenticationException('The username is incorrect.', self::IDENTITY_NOT_FOUND);
        }

        if ($row->password !== $this->calculateHash($password, $row->password)) {
            throw new Security\AuthenticationException('The password is incorrect.', self::INVALID_CREDENTIAL);
        }

        dump($row); // zmena
        die;        // zmena

        unset($row->password);
        return new Nette\Security\Identity($row->id, NULL, $row->toArray());
    }

Editoval castamir (20. 1. 2013 16:31)

Tom1141
Člen | 27
+
0
-

dump($row) vypíše nasledovné (dal som to do linku)
http://pastebin.com/97fbs30n

vvoody
Člen | 910
+
0
-

Ukáž aktuálny dump tej tabulky

castamir
Člen | 629
+
0
-

@**vvoody**

data private => array(2) {
      password => "$2a$07$vngjd7hj08vyfhcwvrf8keXpmXC.B9Qpupl/7tfWFdD0MM1a7Qaqe" (60)
      id => 2
   }
vvoody
Člen | 910
+
0
-

sql dump

castamir
Člen | 629
+
0
-

Primary by měl nejspíš být takový

primary protected => "id" (2)

ale je

primary protected => "user_id" (2)

chce to to ten sql dotaz a jeho výsledek.

Editoval castamir (20. 1. 2013 17:34)

Tom1141
Člen | 27
+
0
-

tu je sql dump (len nad tabuľkou používateľov)
http://pastebin.com/aVpA83AZ

Editoval Tom1141 (20. 1. 2013 17:49)

vvoody
Člen | 910
+
0
-

Nič iné ma nenapadá ako nezmazaná cache, sám si vravel že si tu štruktúru menil. Kde mažeš cache tak čo presne zmažeš?

Tom1141
Člen | 27
+
0
-

V Chrome som dal v nástrojoch vymazať všetky údaje prehliadania, vrátane vyrovnávacej pamäte. Dvakrát. Áno, menil som štruktúru, ale iba názvy primárnych kľúčov, z určitých dôvodov. Mal som predtým v tabuľke ‚user‘ PK user_id, premenoval som ho na id.

castamir
Člen | 629
+
0
-

Cache musíš smazat v projektu, ne v prohlížeči. Typicky je jsou ve složce /temp/cache

vvoody
Člen | 910
+
0
-

A sme doma :D

Tom1141
Člen | 27
+
0
-

Už to ide, díky moc :)