Neúspěšné přihlášení někde a někdy

Taco
Člen | 39
+
0
-

Zdravím.

Mám webovou aplikaci, velice jednoduchou s přihlašováním. Nainstalováno na wedosu.

Problém spočívá v tom, že doma mi to funguje všude. Ale když to ukazuju zákazníkovi v terénu někde na mobilu, tak to se nemůžu přihlásit. To nemůžu přihlásit znamená, že mě to přihlásí, ale přesměruje zpět na přihlašovací formulář. Když se ručně přesunu na stránku s informacemi o právě přihlášeném uživateli, tak se tam dostanu (pod anotací @User(loggedIn)), když se ale přesunu na titulní stránku (také pod anotací @User(loggedIn)), tak mě to přesměruje na přihlašovací. Ověřování a přesměrování vypadá takto:

if (in_array('loggedIn', $user, true) && !$this->getUser()->isLoggedIn()) {
	$this->redirect(':Sign:in');
}

Jak už jsem uvedl, (ne)funguje to jen někdy. A nedaří se mi odpozorovat kdy, natož to nasimulovat.

V logu nic, session se vytváří, když ji smažu, tak jsem odhlášený…

Potřebuju nakopnout, kde bych měl hledat. Mě už došli nápady. Díky moc.

Editoval Taco (16. 9. 2018 23:40)

Phalanx
Člen | 310
+
0
-

1. Odstranil bych:

<?php
in_array('loggedIn', $user, true) &&
?>

a vyzkoušel. Nemáš náhodou v $user objekt?

2. V $this->getUser() by měl být injectovaný objekt Nette\Security\User

Taco
Člen | 39
+
0
-

Tak ten problém je docela zajímavý, protože to funguje tak, že:

Mám UserPresenter, SignPresenter a RegionPresenter. V layoutu mám navigaci, kde je odkaz na User:current a Region:.

Jeden klient mi to rozbíjí použitím. Přihlásí se, a pak ho to přesměruje na /sign/in. Když klikne na Region: (domena.tls/) „přesměruje“ ho to na Sign:in (domena.tls/sign/in). Uvozovky u toho přesměrování jsou tam proto, páč v debug není ten redirect uveden.
Když jsem si hrál s checkRequirements() tak jsem zjistil, že se do toho vůbec nedostane. Klientovi se to vždycky rozbije. Když se mu to rozbije, nefunguje to i mě. Po pár minutách se to spraví. Dokavad se ten klient zase nepokusí přihlásit.

Když klikne na User:current (domena.tls/user/current), dostane se normálně na detail účtu, takže je vidět, že přihlášený je.

Chová se to tak, jako kdyby po kliknutí na domena.tls/ jsem se dostal rovnou a přímo na domena.tls/sign/in bez Netťáckého přesměrování.

Routa je úplně triviální:

	public static function createRouter()
	{
		$router = new RouteList;
		$router[] = new Route('<presenter>/<action>[/<id>]', 'Region:default');
		return $router;
	}

Ještě zkusím zkontrolovat httaccess.

Běží mi to na wedosu. Tak snad tam nemájí nějaká kouzla.

Za jakýkoliv nápad moc dík.

h4kuna
Backer | 740
+
0
-

Ukaž nějaký besepresenter kde je definováný checkrequirment a startup. Nezapomněl jsi někde patent::checkRequirment()?

Taco
Člen | 39
+
+1
-

h4kuna napsal(a):

Ukaž nějaký besepresenter kde je definováný checkrequirment a startup. Nezapomněl jsi někde patent::checkRequirment()?

Žádný BasePresenter nepoužívám. Ani startup.

checkRequirment je triviální, jen jsem změnil z výjimky na přesměrování:

	function checkRequirements($element)
	{
		$user = (array) UI\PresenterComponentReflection::parseAnnotation($element, 'User');
		if (in_array('loggedIn', $user, true) && !$this->getUser()->isLoggedIn()) {
			$this->redirect(':Sign:in');
			//~ throw new Nette\Application\ForbiddenRequestException;
		}
	}

parent::checkRequirements($element) mi tam sice nedává smysl, ale zkusil jsem to přidat na záčatek i na konec mé implementace. Bez efektu.

Jak jsem uváděl, je zajímavé, že se to do té metody checkRequirements($element) ani nedostane. Ono se to prostě přesměruje úplně samo. Buď přímo na úrovni routeru – což je nepravděpodobný, vzhledem k tomu, že to neřekne do Tracy. A nebo na úrovni .htaccess, ale ten je taky triviální.

# Apache configuration file (see https://httpd.apache.org/docs/current/mod/quickreference.html)
Allow from all

# disable directory listing
<IfModule mod_autoindex.c>
	Options -Indexes
</IfModule>

# enable cool URL
<IfModule mod_rewrite.c>
	RewriteEngine On
	# RewriteBase /

	# prevents files starting with dot to be viewed by browser
	RewriteRule /\.|^\.(?!well-known/) - [F]

	# front controller
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
</IfModule>

# enable gzip compression
#<IfModule mod_deflate.c>
#	<IfModule mod_filter.c>
#		AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json application/xml image/svg+xml
#	</IfModule>
#</IfModule>
Taco
Člen | 39
+
0
-

Tak jsem to zdá se rozlouskl.
Po klasickém kolečku konverzace s hotline na wedos.com kdy tvrdili, že za to může Nette, tak prozradili, že tam mají kešování (http-proxy), to když vypnuli, tak to drží. Tak jsem zvědav.