Moduly a více authenticatoru
- TOMeek
- Člen | 64
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
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
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žbuauthenticator
, 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');