Dva Authenticatory v modulove aplikaci

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

Ahoj mohu mit dva Authent… soubory pro FrontModule a AdminModule?
Pripadne jak k nim pristupovat nebo jak nastavit config.neon

dix

uestla
Backer | 799
+
0
-

Doporučuji MultiAuthenticator od Vojty Dobeše – https://github.com/…uthenticator

na1k
Člen | 288
+
0
-

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
+
0
-

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
+
0
-

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)

visitor
Člen | 22
+
0
-

No je mi to jasné s tou services definovanou v config.neon (pokud to bude fungovat :) ). A vypadá to, že největší magií je:

<?php
$user->getStorage()->setNamespace(self::LOGIN_NAMESPACE);
?>

Co to dělá?

Jiří Nápravník
Člen | 710
+
0
-

To není žádná velká magie: https://doc.nette.org/…thentication#…