Dva Authenticatory v modulove aplikaci
- uestla
- Backer | 799
Doporučuji MultiAuthenticator od Vojty Dobeše – https://github.com/…uthenticator
- na1k
- Člen | 288
Když jsem nedávno řešil něco podobného (oddělené přihlašování pro front a back), byly pro mě důležité dva poznatky:
- autentikátorů můžu mít kolik chci (jen pozor na autowire), můžu je
volat ručně a identitu předávat do
$user->login()
- uživatele jde rozdělovat do skupin pomocí
UserStorage::setNamespace()
, takové skupiny pak budou naprosto nezávislé
- visitor
- Člen | 22
na1k napsal(a):
Když jsem nedávno řešil něco podobného (oddělené přihlašování pro front a back), byly pro mě důležité dva poznatky:
- autentikátorů můžu mít kolik chci (jen pozor na autowire), můžu je volat ručně a identitu předávat do
$user->login()
- uživatele jde rozdělovat do skupin pomocí
UserStorage::setNamespace()
, takové skupiny pak budou naprosto nezávislé
Můžeš to prosím trochu rozvést? Jak je mít definované v config.neon? Jak určit, který konkrétní Authenticator použiji?
- na1k
- Člen | 288
visitor napsal(a):
Můžeš to prosím trochu rozvést? Jak je mít definované v config.neon? Jak určit, který konkrétní Authenticator použiji?
Jen nástřely :)
BaseBackendPresenter
public function startup() {
parent::startup();
// nastaveni oddeleneho prihlasovani
$user = $this->getUser();
$user->getStorage()->setNamespace(self::LOGIN_NAMESPACE);
// kontrola prihlaseni
if (!$user->isLoggedIn() && $this->getAction() != 'login') {
$req = $this->storeRequest();
$this->redirect('login', array('backlink' => $req));
}
}
Obsluha přihlašovacího formu do backendu
$authenticator = $this->authenticator;
$f->onSuccess[] = function(Form $frm) use ($authenticator) {
$val = $frm->getValues();
$presenter = $frm->presenter;
try {
$identity = $authenticator->authenticate((array)$val);
} catch (\Nette\Security\AuthenticationException $e) {
$presenter->flashMessage('Přihlašovací údaje nejsou správné', 'alert-error');
$presenter->redirect('this');
}
$presenter->getUser()->login($identity);
$presenter->redirect('default');
};
$this->authenticator
je custom autentikátor, který přes
inject
metodu přijde z configu. Tam jej nedeinuju jako rozhraní,
ale jako běžnou třídu (service), která je mi na základě opět přesného
názvu třídy vstříknutá do back presenteru.
Na frontu se používá klasický authenticator, tka jako např. v examples.
Stačí takhle? :)
Editoval na1k (15. 10. 2013 13:33)