Autentizace neprezije redirect

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

Zdravim!

Mam docela velky problem. Autentizace me jiz fungovala, ale nahle nastala zvlastni chyba. Pokud se autentizuji a hned ve fuknci, kte obsluhuje autentizacni formular a autentizaci samotnou, vypisu userData, tak tam jeste jsou. Jakmile ale provedu redirect, tak po nem, uz $this->getUser() je nautentizovany :( V podstate ulozeni informace o autentizaci neprezije redirect. Mate nekdo poneti proc?

AKTUALIZACE: Nefunguje to pouze na https. bez ssl to jede v poradku. :(

Pridavam kod me autentizace

<?php
public function authenticate(array $credentials)
	{
		$username = $credentials[self::USERNAME];
		//if(!$credentials['extra']){
			$password = $credentials[self::PASSWORD];
			$prefix = "wGX0uI1tjx";
			$postfix = "09GnGntFoi";
		//}

	     require_once("../app/presenters/abra_user.class.php");
		$abra = new abra_user();
		$result = $abra->get_user($username);

		if ($result['password_hash'] !== sha1($prefix.$username.$password.$postfix)) {
			throw new AuthenticationException("Invalid password.", self::INVALID_CREDENTIAL);
		}


		$roles = array();

		return new Identity($result['uid'], $roles, $result);


	}
?>

A jeste obsulzna metoda formulare:

<?php
public function loginFormSubmitted($form)
	{
		try {
			$values = $form->getValues();
			if ($values['remember']) {
				$this->getUser()->setExpiration('+ 14 days', FALSE);
			} else {
				$this->getUser()->setExpiration('+ 1 hour', FALSE);
			}
			$this->getUser()->authenticate($values['username'], $values['password']);
			if($this->getUser()->isAuthenticated()) {
			//print_r($this->getUser()->getIdentity()->getData());
			//exit;
			}

			$this->redirect('this');


		} catch (AuthenticationException $e) {
			$form->addError($e->getMessage());
		}
	}
?>

Editoval Finalgrab (9. 6. 2010 19:10)

Martin
Člen | 171
+
0
-

Zdravím. Vyřešil jsi to nějak? Nebo ví někdo, co s tím? Mně se to teď děje občas i na http. Nějak to souvisí s klientskou stranou spojení. Když se mi dostane Firefox do tohoto stavu, mohu se ještě několikrát přihlásit z Internet Exploreru a pak už z ničeho, dokud nepovypínám vše, co se připojuje na internet. Přitom vypisuji-li si na serveru proměnné, vše je správně těsně před redirectem.

Editoval Martin (27. 6. 2011 8:40)

Finalgrab
Člen | 15
+
0
-

Ahoj, uprime uz nevim jak jsem to vyresil… nejak jsem zmenil umisteni kontroly autentizace (nejak prehodil prikaz kde jsem overoval autentizace a kde jsem presmerovaval), ale uz si fakt nepamatuju jak to presne bylo.
Ale hlavne tam byl problem primo se serverem. Ted si uvedomuju, ze po uspesne autentizace me to presmerovavalo na http bez ssl a to byl problem, protoze nasledne me to zase zpatky hodilo na nastavene https a nejak se to cyklylo

joe
Člen | 313
+
0
-

Martin napsal(a):

Když se mi dostane Firefox do tohoto stavu, mohu se ještě několikrát přihlásit z Internet Exploreru a pak už z ničeho

Pokud se přihlásíš přes jeden prohlížeč, tak v jiném automaticky přihlášený nebudeš… Aspoň tak jsem to pochopil z toho co jsi napsal.

Martin
Člen | 171
+
0
-

Finalgrab: Dík za info. Mě to dělalo jen jeden den, teď už se mi nedaří to vyvolat. Asi to nechám plavat, jen mě zajímalo, čím to mohlo být.

joe: Ne, psal jsem, že poté, co přestane přihlašování fungovat z Firefoxu, přestane až po jednom či několika odhlášeních fungovat i z IE.
Pomohlo až vypnutí obou prohlížečů, mailového klienta a všeho, co mohlo sahat na internet, případně restart počítače na klientské straně.

Dělo se mi to na serveru i na lokálu. Pod debuggerem bylo souhlasící heslo, vyplněna identita, ale po redirektu už isLoggedIn() vracelo FALSE a kupodivu se ztratila i identita. Neměl jsem ale čas prohlížet soubory na disku, řešil jsem k tomu další věci.

Nějak mi to ale dnes už nedělá, přijde mi, že na to mělo vliv zatížení procesoru a objem diskových operací (měl jsem toho puštěného kromě Apache ještě hodně jiného). Proč mi to ale chvíli dělalo i na serveru, nevím. Zatím jsem nezprovoznil vzdálené ladění, takže tam mohla být chyba i jinde.

Editoval Martin (28. 6. 2011 8:22)

lucass
Člen | 89
+
0
-

Zdarec,

mně to dělalo na zajizdy.cz také. Ale stávalo se to jen u některých uživatelů, ne u všech. S jedním jsem to tedy testoval – vyzkoušel všechny prohlížeče a ve všechn mu to nefungovalo. Nakonec jsem zakomentoval volání regenerateId() nad session v souboru User.php a od té doby to běží bez problémů.

Asi to nebude úplně košér řešení, ale pomohlo to:)

Dej vědět, jestli to bylo tím.

Lu.

hAssassin
Člen | 293
+
0
-

Zdravim,
mam trochu jinej problem, ale nechce se mi kvuli tomu zakladat novy vlakno. Jde o to ze prihlaseni mi funguje v pohode, ale jakmile se po prihlaseni nekde vyskytne chyba a vyskoci ladenka, tak po oprave chyby a obnoveni stranky jsem odhlasenej… Neni to chyba nebo je to schvalne? Identita usera by mela byt v session tak je divny ze by sessions neprezily ladenku :(

hAssassin
Člen | 293
+
0
-

Tak to tu trochu ozivim… Problem mam porad stejny, cili po uspesnym prihlaseni, kdyz kdykoliv vyskoci ladenka jsem odhlasen. Takovy chovani si dovedu predstavit na Produkci ale na Develu je to dost blby, kdyz se vzdy po oprave chyby musim znovu prihlasit a proklikat na danou stranku…

Zkusil sem zakomentovat volani metody regenerateId() v User.php jak pise lucass coz sice pomohlo, ale reseni se mi vubec nelibi. Chci se zeptat, zda jde o chybu, nebo je to zamer a pripadne jak se tomu vyhnout abych nemusel upravovat zdrojaky Nette. Diky.

22
Člen | 1478
+
0
-

chyba bude na 99,9% někde u tebe:

  • zkontroluj nastavení expirace celé session jestli není kratší, než expirace usera
  • zkontroluj, jestli se session nestarutje 2×
  • vymaž všechny staré cookies
  • pokud to nepomůže, pročti si forum o problémech s odhlášením
hAssassin
Člen | 293
+
0
-

@**22 >** thanks… nejak sem zapomnel nastavit v bootstrapu expiraci session jako celkove… Ted se zda ze to vali.

Martin
Člen | 171
+
0
-

lucass: Dík za tip. Problém je, že mně to dělalo právě jeden den (pro všechny uživatele) a od té doby už ne. Takže to už asi nevyzkouším.