$user->autenthicate nefunguje 500 error
- fidLi
- Člen | 41
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
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)
- fidLi
- Člen | 41
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
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
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
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
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)