Moduly a více authenticatoru

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

Zdravím,
mám aplikaci s Front a Admin moduly a v každém se potřebuji přihlásit z jiné tabulky v DB. Chci se zeptat jak správně nastavit config.neon aby mi toto fungovalo. V každém modulu mám vlastní neon ve kterém si definuji autenticator pro daný modul, ale nette asi neumí rozlišit autenticator k modulu ve kterém se nacházím.

Předem děkuji

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Pokud dobře chápu situaci, tak aplikace bez ohledu na to, jaký modul je pro uživatele právě aktuální (kde právě brouzdá) vytvoří SystemContainer podle dvou konfiguračních souborů. Ty se nutně musí zaregistrovat v nějakém pořadí, a pokud oba registrují službu authenticator, ten pozdější přepíše první.

Dovolím si doporučit moje rozšíření MultiAuthenticator. Nastavení pak může vypadat takto:

front.neon:

authentication:
	front: FrontendModule\Authenticator # nějaká třída používající tabulku pro frontend

admin.neon:

authentication:
	admin: AdminModule\Authenticator # jiná třída používající tabulku pro admin modul

Volání při přihlášení:

$name = explode(':', $presenter->getName());
$module = strtolower(array_shift($name));

// $user instanceof Nette\Security\User
$user->login($module, 'username', 'password');
TOMeek
Člen | 64
+
0
-

Super už to funguje. Sice jsem si musel zápis v neonu upravit na

authentication:
	front:
		class: \FrontModule\Authenticator
		autowired: no

	administrator:
		class: \AdministratorModule\Model\Authenticator
		autowired: no

Protože bez toho autowired mi to hlásilo Multiple services of type Nette\Security\IAuthenticator found. Ale po této úpravě to šlape jak má. Ještě jednou díky.

vojtech.dobes napsal(a):

Pokud dobře chápu situaci, tak aplikace bez ohledu na to, jaký modul je pro uživatele právě aktuální (kde právě brouzdá) vytvoří SystemContainer podle dvou konfiguračních souborů. Ty se nutně musí zaregistrovat v nějakém pořadí, a pokud oba registrují službu authenticator, ten pozdější přepíše první.

Dovolím si doporučit moje rozšíření MultiAuthenticator. Nastavení pak může vypadat takto:

front.neon:

authentication:
	front: FrontendModule\Authenticator # nějaká třída používající tabulku pro frontend

admin.neon:

authentication:
	admin: AdminModule\Authenticator # jiná třída používající tabulku pro admin modul

Volání při přihlášení:

$name = explode(':', $presenter->getName());
$module = strtolower(array_shift($name));

// $user instanceof Nette\Security\User
$user->login($module, 'username', 'password');