Přihlašování: Call to undefined method User::authenticate()

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

Dobrý den,
postupuji přesně dle http://zdrojak.root.cz/…i-uzivatelu/, ale jakmile dojdu k:

<?php
$user->authenticate($login,$password);
?>

…dostanu chybu:
Call to undefined method User::authenticate().

Jako kdyby:

<?php
$user->setAuthenticationHandler(new MyAuthenticator);
?>

…nefungovalo.
Věřím, že je to nějaká pakárna, ale po 4 hodinách zkoušení na to stále nemohu dojít.

Používám Nette 2.0 pro 5.2 bez prefixů.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

authenticate byla již dříve odstraněna, správné je použít login.

Tomáš Votruba
Moderator | 1114
+
0
-

Děkuji mnohokrát. Dohledal jsem zbytek a pro úplnost doplňuji.

<?php
authenticate() → login()
signOut() → logout()
isAuthenticated() → isLoggedIn()
getSignOutReason() → getLogoutReason()
$onAuthenticated → $onLoggedIn
$onSignedOut → $onLoggedOut
?>

Zdroj: https://forum.nette.org/…t-isloggedin

Tomáš Votruba
Moderator | 1114
+
0
-

Teď mi to pro změnu chce tu metodu authenticate, když tam mám login. Co s tím?
Obecně by mi pomohl nějaký jednoduchý tutorial na přihlášení. Mám s tím neskutečné problémy.

Class MyAuthenticator contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (IAuthenticator::authenticate)

Děkuji.

HanziQ
Člen | 16
+
0
-

Přejmenování platí jen pro třídu User, v IAuthenticator metoda authenticate zůstává:

voláš

<?php
 $user->login(...);
?>

ten si najde IAuthenticator a volá

<?php
$authenticator->authenticate(...);
?>

Editoval HanziQ (15. 11. 2010 18:14)

Tomáš Votruba
Moderator | 1114
+
0
-

Používám na začátku zmíněnou třídu MyAuthenticator, kde definuji login(). Pokud tam dám authenticate(), tak se pak nepředají proměnné tu: $user->login(array($aLogin,$aPassword));

<?php
// přihlášení
$user = Environment::getUser();

// zaregistrujeme autentizační handler
$user->setAuthenticationHandler(new MyAuthenticator);
// nastavíme expiraci
$user->setExpiration('+ 60 minutes');

try {
  // pokusíme se přihlásit uživatele...
  $user->login(array($aLogin,$aPassword));
  // ...a v případě úspěchu presměrujeme na další stránku
  Environment::getHttpResponse()->redirect('.');
}
catch (AuthenticationException $e) {
  echo 'Chyba: ', $e->getMessage();
}
?>
Vyki
Člen | 388
+
0
-

Mrkni se jak je do uděláno v příkladu CD-collection. Nic víc k pochopení nepotřebuješ, z příkladu se to naučíš nejlépe.

Edit: A hlavně neopomeň config.ini konkrétně řádek, kde je
service.Nette-Security-IAuthenticator = UsersModel

Editoval Vyki (15. 11. 2010 23:37)