Přepínání mezi weby (non-nette a nette)

reprona
Člen | 6
+
0
-

Ahoj, zdravím vás,

příkladně: mám dva projekty jeden non-nette (A) https://www.test.cz a druhý (B) v nette https://sub.test.cz

Přihlásím se na B a dostanu se na A (v podstatě po úspěšném přihlášení nastavím pár sessions proměnných, které vyžaduje A).
Přihlásím se na A a nedostanu se do B (v podstatě jsem vždycky unlogged) – nevím, co nastavit, abych byl logged.

PHPSESSID je na obou stranách stejný, zkouším vždy v anonymním okně a mažu (pro jistotu) cache.

V Nette mám nastaveno:

session:
	expiration: 14 days
	autostart: smart
	cookie_secure: true
	cookieDomain: '.test.cz'

Ve VirtualHostu mám nastaveno:

<IfModule mod_php5.c>
    php_value session.cookie_domain .test.cz
</ifModule>

Už jsem z toho docela zoufalý – Co udělat ideálně pro to, aby se ,,zautorizovalo" z non-nette do nette?

Děkuji předem za konstruktivní nápady.
P.

CZechBoY
Člen | 3608
+
0
-

a jak kontrolujes ze si logged? nejlepsi by bylo pouzit nette session i v non nette aplikaci.

reprona
Člen | 6
+
0
-

@CZechBoY
Klasika:

if ($this->user->isLoggedIn()) { ... }

Ty neťacké session bych rád nastavil, ale jaké?

Napadlo mě ještě udělat přes cURL přihlášení uživatele, nebo obdobně přes Guzzle HTTP clienta, ale nevím no… To mi nepřijde moc jako šťastné řešení.

Marek Bartoš
Nette Blogger | 1167
+
0
-

nette/http prefixuje všechna data v session, nemají tak stejnou strukturu jako když je do session zapíšeš přímo. Též potřebuješ mít session v obou aplikacích identicky nastavenou a spoléhat se i na to, že přihlašovací mechanizmus je stejný.

https://github.com/…nSection.php#…

Martk
Člen | 655
+
+1
-

To nemůžeš u non-nette udělat tohle?

$container = require 'bootstrap.php'; // nebo si uděláš třídu booting a tam si vypneš tracy a nastavíš trošku jinak oproti nette

// session v non-nette
$session = $container->getByType(Session::class);

// user v non-nette
$user = $container->getByType(User::class);
var_dump($user->isLoggedIn());

// prihlaseni v non-nette
$user->login('...', '...');
reprona
Člen | 6
+
0
-

@Martk
Přeci nebudu provádět takovou šílenost s prominutím. Celou implementaci loginu bych musel narvat do non-nette. To si myslím, že je lepší zavolat login právě na dálku (HTTP Guzzle, …).

@Mabar
Tak to nevím, jak bych zesynchronizoval ty jiné názvy sessions. Ach jo.

@CZechBoY
Any idea?

CZechBoY
Člen | 3608
+
0
-

Tak potom by to melo fungovat pokud pouzivas uplne stejnou implementaci autentizace v obou aplikacich.

Moc nechapu cemu se divis u @Martk kodu, vsak neco podobneho si prece musel udelat taky, ne?

reprona
Člen | 6
+
0
-

@CZechBoY
Autentizace je odlišná. Nette si to řeší po svém a non-nette taky. Čemu se divím? Spíše bych to řešil nějak přes externí službu, která by běžela na Nette a přes zmíněné HTTP služby bych je zavolal z non-nette.

CZechBoY
Člen | 3608
+
0
-

Tak posli jak kontrolujes ze si prihlaseny, viz moje predchozi otazka.

Editoval CZechBoY (28. 11. 2019 17:26)

Marek Bartoš
Nette Blogger | 1167
+
+1
-

Jaký jiný názvy session proboha? Pokud jsi nic nepřenastavoval, tak se v obou případech jmenuje PHPSESSID. Zkontroluj si, zda se ti session id nastavené v jedné appce posílá i do druhé, pak zda vidíš data v session a nakonec už jen potřebuješ ta prefixovaná data správně zapsat v non-nette aplikaci. Odkaz na to, jak Nette data prefixuje jsem ti poslal ($_SESSION['__NF']['DATA']), případně můžeš do non-nette appky nainstalovat nette/http a přistupovat k session stejně jako v Nette appce.