Po přepnutí se na jiné view (stránku) se uživatel odhlásí
- ondrakrajcik
- Člen | 45
Omlouvám se, že v poslední době moc otravuju. Už jsem si myslel, že
nette začínám pomalu rozumět, ale narazil jsem na problém. když se
přihlásím jako uživatel a přejdu po přihlášení třeba na hlavní
stránku webu, tak se uživatel odhlásí. Ikdyž se pak vrátím zpět na
přihlašovácí stránku a dám F5 tak uživatel příhlášen již není.
Vypadá to jako by proměnná $user byla pouze lokální (a to jsem myslel že
ji mám jako globální)
v Base presenteru jsem si deklaroval proměnnou user
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
protected $user;
...
V HomePagePresenteru mam funkci která zprácovává přihlašovací údaje
...
public function signInFormSubmitted(UI\Form $form)
{
$values = $form->getValues();
$nick = $values->nick;
$password = $values->password;
$this->user = $this->getUser();
$this->user->setExpiration('30 minutes', TRUE);
try{
$this->user->login($nick, $password);
$this->flashMessage("prihlasen");
}
catch(Nette\Security\AuthenticationException $e){
if($e->getMessage() == "Invalid password."){
$this->flashMessage("Špatné heslo.");
}
else if($e->getMessage() == "User not found."){
$this->flashMessage("Uživatel neexistuje.");
}
}
}
..
- Pavel Macháň
- Člen | 282
ondrakrajcik napsal(a):
Omlouvám se, že v poslední době moc otravuju. Už jsem si myslel, že nette začínám pomalu rozumět, ale narazil jsem na problém. když se přihlásím jako uživatel a přejdu po přihlášení třeba na hlavní stránku webu, tak se uživatel odhlásí. Ikdyž se pak vrátím zpět na přihlašovácí stránku a dám F5 tak uživatel příhlášen již není.
Vypadá to jako by proměnná $user byla pouze lokální (a to jsem myslel že ji mám jako globální)v Base presenteru jsem si deklaroval proměnnou user
abstract class BasePresenter extends Nette\Application\UI\Presenter { protected $user; ...
V HomePagePresenteru mam funkci která zprácovává přihlašovací údaje
... public function signInFormSubmitted(UI\Form $form) { $values = $form->getValues(); $nick = $values->nick; $password = $values->password; $this->user = $this->getUser(); $this->user->setExpiration('30 minutes', TRUE); try{ $this->user->login($nick, $password); $this->flashMessage("prihlasen"); } catch(Nette\Security\AuthenticationException $e){ if($e->getMessage() == "Invalid password."){ $this->flashMessage("Špatné heslo."); } else if($e->getMessage() == "User not found."){ $this->flashMessage("Uživatel neexistuje."); } } } ..
Proč máš v BasePresenteru toto?
protected $user;
a toto?
$this->user = $this->getUser();
Nette\Application\UI\Presenter již obsahuje usera
/** @var Nette\Security\User */
private $user;
Takže to tam nedávej znova a hlavně nechápu proč děláš defakto $this->user = $this->user
Z BasePresenteru odstraň tu tvoji proměnou $user a ve formuláři používej normálně $this->user->login (sice je $user private ale UI\Presenter ma v predkoj Nette\Object takze tento zapis normalne pujde)
A formulář bude
public function signInFormSubmitted(UI\Form $form)
{
$values = $form->getValues();
$nick = $values->nick;
$password = $values->password;
//$this->user = $this->getUser(); // Todle smaz ( provadis zde $this->user = $this->user)
$this->user->setExpiration('30 minutes', TRUE);
try{
$this->user->login($nick, $password);
$this->flashMessage("prihlasen");
}
catch(Nette\Security\AuthenticationException $e){
if($e->getMessage() == "Invalid password."){
$this->flashMessage("Špatné heslo.");
}
else if($e->getMessage() == "User not found."){
$this->flashMessage("Uživatel neexistuje.");
}
}
}
Editoval EIFEL (8. 2. 2014 14:55)
- ondrakrajcik
- Člen | 45
I přesto problém přetrvává. Proto jsem to udělal tak, že jsem
zkoušel uložit proměnou do baseresenteru, jeslti to nebude tak nahodou
fungovat, ale stejně to nefungovalo. Nevím si rady.
Poradí někdo?
Editoval ondrakrajcik (8. 2. 2014 21:52)
- ondrakrajcik
- Člen | 45
Vyzkoušel jsem snad už všechno možné, ale pořád to nefunguje. To jsem sám, kdo kdy měl takový problém? Zkoušel jsem nastavovaní expirace (různé varianty), ale nepomohlo to. Po přejítí na hlavní (nebo jakoukoliv jinou) stránku, se uživatel sám odhlásí. Není opravdu potřeba ji uložit do nějaké globální proměnné?
- Pavel Macháň
- Člen | 282
ondrakrajcik napsal(a):
Vyzkoušel jsem snad už všechno možné, ale pořád to nefunguje. To jsem sám, kdo kdy měl takový problém? Zkoušel jsem nastavovaní expirace (různé varianty), ale nepomohlo to. Po přejítí na hlavní (nebo jakoukoliv jinou) stránku, se uživatel sám odhlásí. Není opravdu potřeba ji uložit do nějaké globální proměnné?
Nemáš v base presenteru nebo někde jinde odhlášení? Btw koukni se jestli se po každém refreshi nevytváří nové session atd.
- ondrakrajcik
- Člen | 45
V SignInPresenter jsem našel
public function actionOut()
{
$this->getUser()->logout();
$this->flashMessage('You have been signed out.');
$this->redirect('in');
}
ale zakomentování toho logoutu nepomohlo. Jinak nikde žádný logout nemám.
Ale teď jsem si všiml v debug baru (jeslti to správně říkám), že když najedu kurzorem na toho panáčka, tak vyskočí tabulka, v hlavičce má napsané „Unlogged“ a obsahuje informace o uživateli, který se přihlásil.
Nette\Security\Identity #8e95
id private => 10
roles private => array ()
data private => array (16)
name => "ondra" (7)
surname => "ondra" (9)
nick => "mujnick" (6)
password => "123" (8)
email => "neco@seznam.cz" (19)
phone => "123456789" (9)
country => "kraj" (9)
city => "mesto" (14)
psc => "12345" (5)
active => "no" (2)
credit => 129
ads => 15
time => "1374051472" (10)
code => "78152" (5)
ip => ""
id => 10
Když přejdu na hlavní stránku, tak tyto informace zůstanou nezměněné
Editoval ondrakrajcik (9. 2. 2014 10:48)
- Pavel Macháň
- Člen | 282
ondrakrajcik napsal(a):
V SignInPresenter jsem našel
public function actionOut() { $this->getUser()->logout(); ...... }
ale zakomentování toho logoutu nepomohlo. Jinak nikde žádný logout nemám.
Ale teď jsem si všiml v debug baru (jeslti to správně říkám), že když najedu kurzorem na toho panáčka, tak vyskočí tabulka, v hlavičce má napsané „Unlogged“ a obsahuje informace o uživateli, který se přihlásil.
Nette\Security\Identity #8e95 ...... id => 10
Když přejdu na hlavní stránku, tak tyto informace zůstanou nezměněné
Takhle se nette chová pokud byl uživatel přihlášený a po odhlášení se nevymaze identita uzivatele (slouzi to ke sledovani navstevnika i po odhlaseni abys vedel kdo to byl)… Pokud dáě $this->user->logout(TRUE); tak se uživatel odlásí a smaže se i jeho identita.
Používáš vtomto projektu subdomény? (defaultni nastaveni je pouze pro aktualni domenu kde se prihlasujes) Když bys měl třeba přihlášování www.domena.tld/sign/in a po přihlášení si směroval na admin.domena.tld tak o přihlášení přijdeš (ale nevím jestli by nezařvala i identita)
BTW ten actionOut je OK tam to odhlášení logicky být má.
Editoval EIFEL (9. 2. 2014 12:19)
- ondrakrajcik
- Člen | 45
Zkusil jsem smazat identitu pomocí $this->user->logout(TRUE)
v debugger baru se poté objevilo: „Unlogged no identity“
Pak jsem se znovu přihlásil a opět uplně stejné nežádané chování.
Žádná změna.
Co se subdomén týče, tak jsem si na serveru vytvořil zkušební adresář kde to testuju.
http://mojeadresa.cz/…prihlasit-se
Po úspěšném přihlášení přejdu na hlavní stranu, tj.
http://mojeadresa.cz/…eProjekt/www
A chová se to jako bych přihlášený nebyl. Ani po návratu na stránku s přihlášením
http://mojeadresa.cz/…prihlasit-se
se to chová jako bych přihlášený nebyl, ale v debugger baru po kliknutí na panáčka se vypíše opět v hlavičce „Unlogged“
Nette\Security\Identity #8e95
id private => 10
roles private => array ()
data private => array (16)
name => "ondra" (7)
surname => "ondra" (9)
nick => "mujnick" (6)
password => "123" (8)
email => "neco@seznam.cz" (19)
phone => "123456789" (9)
country => "kraj" (9)
city => "mesto" (14)
psc => "12345" (5)
active => "no" (2)
credit => 129
ads => 15
time => "1374051472" (10)
code => "78152" (5)
ip => ""
id => 10
Může to být tím, že projekt nemám přímo v kořenovém adresáři ale ve složce „Zkušební/netteProjekt“ ?
- Pavel Macháň
- Člen | 282
ondrakrajcik napsal(a):
Zkusil jsem smazat identitu pomocí $this->user->logout(TRUE)
v debugger baru se poté objevilo: „Unlogged no identity“
Pak jsem se znovu přihlásil a opět uplně stejné nežádané chování. Žádná změna.Co se subdomén týče, tak jsem si na serveru vytvořil zkušební adresář kde to testuju.
http://mojeadresa.cz/…prihlasit-se
Po úspěšném přihlášení přejdu na hlavní stranu, tj.
http://mojeadresa.cz/…eProjekt/www
A chová se to jako bych přihlášený nebyl. Ani po návratu na stránku s přihlášením
http://mojeadresa.cz/…prihlasit-se
se to chová jako bych přihlášený nebyl, ale v debugger baru po kliknutí na panáčka se vypíše opět v hlavičce „Unlogged“
Nette\Security\Identity #8e95 id private => 10 roles private => array () data private => array (16) name => "ondra" (7) surname => "ondra" (9) nick => "mujnick" (6) password => "123" (8) email => "neco@seznam.cz" (19) phone => "123456789" (9) country => "kraj" (9) city => "mesto" (14) psc => "12345" (5) active => "no" (2) credit => 129 ads => 15 time => "1374051472" (10) code => "78152" (5) ip => "" id => 10
Může to být tím, že projekt nemám přímo v kořenovém adresáři ale ve složce „Zkušební/netteProjekt“ ?
To nevadí takhle to platí pro celou mojeadresa.cz (pokud bys tam mel vic nette projektu tak by nastal problem kvuli stejnemu prihlasovani… prihlasil bys to v jednom a vdruhem bys byl taky prihlasenej i kdyby to melo jine ucty)
BTW zapni si session debug bar a koukej se co se stim děje během redirectu
nette:
session:
debugger: on
Editoval EIFEL (9. 2. 2014 14:21)
- ondrakrajcik
- Člen | 45
Session debug bar jsem zapnul, po přihlášení se do session uživatel načte, když přejdu na jinou stránku tak se v session nic nemění, ale něco co mně zarazilo jsem přece jen našel
array (1)
"Nette.Http.UserStorage/" => array (3)
authenticated => FALSE // TENTO ŘÁDEK MĚ ZARAZIL!!!!!
identity => Nette\Security\Identity #2873
id private => 11
roles private => array (1)
0 => "member" (6)
data private => array (16)
reason => 1
Nemělo by být na řádku kde je „authenticated ⇒ FALSE " místo
"FALSE“ „TRUE“ ?
Co to může způsobovat?
- ondrakrajcik
- Člen | 45
Tak jsem zkusil založit nový projekt a vyzkoušel jsem přihlašování tam. Bez problémů funguje. Tak si podle tohoto funkčního projektu zkusím najít chybu. Pak přiložím řešení zda na to příjdu
- Pavel Macháň
- Člen | 282
ondrakrajcik napsal(a):
Tak jsem zkusil založit nový projekt a vyzkoušel jsem přihlašování tam. Bez problémů funguje. Tak si podle tohoto funkčního projektu zkusím najít chybu. Pak přiložím řešení zda na to příjdu
Určitě to bude nějaká blbost :) nebo zapomenutej kus kódu ;-)
Takhle se blbě hledá chyba, když nevidíme zdrojáky. Nenapadá mě čím by
to mohlo být.