Front a Admin authenticator
- Xantes
- Člen | 28
Zdravím, potřeboval bych mít přihlašování pro front a admin modul
zvlášť.
Podařilo se mi to tak, že jsem v každém modulu udělal BasePresenter a do
metody startup jsem vložil:
$this->getUser()->getStorage()->setNamespace('Module');
Funguje to ale tak, že musím mít uživatele pro Front i Admin v jedné tabulce, což nechci. Napadlo mě tedy udělat druhý authenticator. V config.neon mám
services:
authenticator: Authenticator
zkoušel jsem tam přidat druhý, ale nevím, jak ho při přihlašování
použít. Lze to nějak jednoduše?
Popřípadě by mi stačilo, aby se původní authenticator, který již funguje
použil pro Front modul a pro Admin modul se použilo jen přihlašovací jméno
a heslo pevně nastaveno, že by se nemuselo tahat z databáze.
Díky za rady.
- Tomáš Kolinger
- Člen | 136
Lze to udělat přes jeden (a detekovat zdrojovou tabulku dle aktuálního modulu). NEbo lépe použít rozšíření https://componette.org/search/?… a to ti už umožní mít více authanticatorů, při ->login si dle identifikátoru zvolíš, který chceš použít.
- Xantes
- Člen | 28
Původně jsem se právě chtěl použití toho addonu vyhnout a jít vlastní cestou. Nakonec jsem ho ale vyzkoušel a zdá se, že funguje dobře. Díky
Chtěl bych se ale zeptat, jak se píše v addonu, že lze zaregistrovat i obyčejný callback, tak jsem to udělal pro admin modul následovně
$container->authenticator->addAuthenticator('authadmin', function ($username, $password) {
if ($username === 'test' && $password === 'test') {
return new Nette\Security\Identity('authadmin');
}
});
Laděnka ale hlásí Missing argument 2 for {closure}(). Neví někdo proč ten callback nefunguje?
- Tomáš Kolinger
- Člen | 136
Nevím proč to nefunguje ale tomuhle bych se určitě vyhnul. Tohle předpokládám máš v bootstrapu a to je poměrně pěkná prasárna. Lepší je mít normální dva authenticatory, jen je neregistruješ jako službu ale jako parametry toho rozšíření. To je celé… Navíc jak tady získáš přístup do DB? Z $container->getService()? Fuj, fuj…
- David Matějka
- Moderator | 6445
@Xantes: imho je v doc chyba a tomu callbacku se posila pouze jeden argument s polem jednotlivych argumentu, stejne jako v pripade klasickeho authenticatoru
- Xantes
- Člen | 28
@Tomáš Kolinger: Vlastně jsem ani do databáze přistupovat nechtěl. Chtěl jsem si jen pro jednoduchost zkusit do administrace přihlašování s pevně nastaveným uživatelským jménem a heslem mimo db, protože správce bude stejně jen jeden. Ideální řešení to ale asi není a nejspíš to stejně udělám s dvěma athenticatory, jak píšeš.
@matej21: Po upravení argumentů funguje. Díky.
- petr.pavel
- Člen | 535
Jenom pro protokol, bez add-onu to jde jednoduše:
$this->user
->setAuthenticator($this->context->adminAuthenticator)
->setAuthorizator($this->context->adminAuthorizator)
->storage->setNamespace('Admin');
$this->user
->setAuthenticator($this->context->playerAuthenticator)
->setAuthorizator($this->context->playerAuthorizator)
->storage->setNamespace('Player');