$user->autenthicate nefunguje 500 error

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

Zdravím, už asi 2 hodinky si nad tím trhám vlasy…

bootstrap:

if(!Environment::getSession()->isStarted()){
        Environment::getSession()->start();

}

presenter

...
 $user = Environment::getUser();
  if (!$user->isAuthenticated()){
  $user->setExpiration(0);
  $user->authenticate('test', 'plesk');
}
...

pokud odstraním (zakomentuji //) řádek s authentikací a expirací, tak mě to normálně formulář provede
(redirect samozřejmě mám, a všechny náležitosti) chybu vydím v $user->authenticate(‚jmeno‘, ‚heslo‘)
s tímhle si fakt nevím rady, podle mě bude chyba v tom, že jsem někde něco nenastavil…

Framework::VERSION = 0.9.3

Editoval fidLi (20. 4. 2010 22:21)

jasir
Člen | 746
+
0
-

Tipuju na změnu authenticate na isLoggedIn :

https://forum.nette.org/…-verze-0-9-4

Edit : Tak akorát jsi zaeditoval první příspěvek že máš 0.9.3 tak je to asi něco jiného.

Editoval jasir (20. 4. 2010 22:23)

Aurielle
Člen | 1281
+
0
-

0.9.4 má ještě pořád zachované i stávající funkce pokud se nepletu, a to dokonce bez deprecated errorů…

fidLi
Člen | 41
+
0
-

zkusím upgradovat na 0.9.4 a použít ty funkce is logged in atd

Stále to dělá

$user = Environment::getUser();
  if (!$user->isLoggedIn()){
  $user->setExpiration(0);
  $user->login('test', 'plesk');
  $this->redirect('Homepage:default');

z bootstrapu samozřejmě odstraněno

Editoval fidLi (20. 4. 2010 22:34)

Ondřej Mirtes
Člen | 1536
+
0
-

Co to dělá?

Neznamená setExpiration(0) náhodou, že přihlášení vyexpiruje hned? V takovém případě by ti to mohlo končit na nekonečné smyčce.

fidLi
Člen | 41
+
0
-

to by mělo znamenat uzavření při vypnutí, jinak zkoušel jsem tam dát 60, a taky to hází error (500 internal, laděnka to ignoruje)

Editoval fidLi (20. 4. 2010 22:38)

fidLi
Člen | 41
+
0
-

mě příjde, že volám statickou metodu
a poté volám funkci neexistujícího objektu $user, respektive příjde mi divné volat funkci statické funkce…
EDIT: jen dedukuji, protože minule jsem volal statickou funkci s dotazy na databázi, ale nebyl jsem připojen, a taky než jsem to zjistil mě to trvalo tak 2–3 hodinky (zkoušel jsem všechno)
ale pokud je to zapouzdřený new User tak je to v pořádku přece…

EDIT2: Musí to být v try catch bloku?

EDIT3: Asi ne, protože stále to hází Error 500

try {
 $uzivatel->login('test', 'plesk');
 }
 catch (AuthenticationException $e){
 debug::dump($e);
 }

EDIT4: No jo, vždyt já jsem upravil funkci authenticate v usersmodel

public function authenticate(array $credentials)
   {
       $username = $credentials['username'];
       $password = sha1($credentials['password']);

       $row = dibi::fetch('SELECT * FROM [users] WHERE [username]=%s', $username);


       if (!$row) {
           return self::ERROR_USER;
       }

       else{
        if ($row->heslo != $password) {
           return self::ERROR_PASSWORD;
        }
        else {

           return new Identity($row->username);


           }

       }
       }

ale to by nemělo dělat ten problém ne?
jelikož logged je funkce o sessions, a je v objektu user, tak nic, jen se snažím házet nápady, protože já už v tom mám guláš, tak snad si něčeho všimnete

Editoval fidLi (20. 4. 2010 22:54)

bazo
Člen | 620
+
0
-

len taka poznamka co ma byt self::ERROR_USER self::ERROR_PASSWORD? preco nevyhadzujes vynimky
napr

<?php
throw new AuthenticationException("Invalid password.", self::INVALID_CREDENTIAL);
?>

existuej vobec $row->heslo ? ked mas username v db, tak predpokladam, ze heslo mas ulozene v password

fidLi
Člen | 41
+
0
-

heslo samozrejme existuje
problem nevidim v pouziti atuh exception
mozná s Identitou, že se to nějak mísí s User a pak to nefunguje

a ty errory jsou konstanty třeba –2 –4 atd, v prezenteru pak na to odkazuji

EDIT: HEUREKA, Funguje, řešení

config

service.Nette-Security-IAuthenticator = MojeTridaSMetodouAtuhenticate

pak to řeším přes Environment::getUser()->authenticate(‚jmeno‘, ‚heslo‘)

s loginem to nefugnuje i na verzi 0.9.4

Editoval fidLi (21. 4. 2010 15:46)