prihlaseni pro backend a frontend zvlast
- muflix
- Člen | 92
Ahoj, potřeboval bych poradit ohledně přihlašování zvlášť pro administraci a zvlášť pro web. Uživatele pro web a administraci mám v databázi oddělené i s jinými sloupečky. Nevím jestli použít jeden Authenticator nebo dva, ale možná lepší řešení i do budoucna bude použít authenticatory 2 kvůli univerzálnosti a případnému vyhnutí se problémů o kterých ještě nevím :) zatím mám funkční řešení pro administraci (nevím jestli je to nejlepší/aktuální řešení, ale kdysi sem to dělal podle návodu a funguje mi to)
BasePresenter.php
<?php
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
public function handleSignOut()
{
$this->getUser()->logout();
$this->redirect('Sign:in');
}
}
?>
SecuredPresenter.php
<?php
abstract class SecuredPresenter extends BasePresenter
{
protected function startup()
{
parent::startup();
if (!$this->getUser()->isLoggedIn()) {
$this->redirect('Sign:in');
}
}
}
?>
AdminPresenter.php
<?php
class AdminPresenter extends SecuredPresenter {...}
?>
SignPresenter.php
<?php
use Nette\Application\UI, Nette\Security as NS;
class SignPresenter extends BasePresenter
{ ...
public function signInFormSubmitted($form)
{ ... $this->getUser()->login($values->username, $values->password); ... }
... }
?>
config.neon
`
services:
authenticator: Authenticator(@connection)
`
Authenticator.php
<?php
use Nette\Security as NS;
class Authenticator extends Nette\Object implements NS\IAuthenticator
{ ...
public function authenticate(array $credentials)
{ ... return new NS\Identity($row->id, NULL, $row->toArray()); }
... }
?>
------------ To byl můj aktuální stav a potuď mi přihlašování do administrace funguje -------------
pokusil jsem se tedy postupovat podobným postupem pro přihlašování na web a vytvořil jsem
BasePresenter.php
zůstal stejný, akorát pak do něho na konci kdyžtak přidám
odhlašování
SecuredFrontPresenter
vymazal jsem redirect na přihlašovací form, protože frontend mi mohou
procházet i nepřihlášení uživatelé
<?php
abstract class SecuredFrontPresenter extends BasePresenter
{
protected function startup()
{
parent::startup();
}
}
?>
HomepagePresenter.php
Presenter, ke kterému bych chtěl přidat možnost k přihlašování, proto
jsem změnil rozšíření
<?php
class HomepagePresenter extends SecuredFrontPresenter {...}
?>
config.neon
tady pokuď přidám
`
services:
authenticator: Authenticator(@connection)
authenticatorFront: AuthenticatorFront(@connection)
`
?>
tak mi to hodí chybu duplicitní služby
`
Multiple services of type Nette\Security\IAuthenticator found.
`
proto jsem tuto změnu zatím zakomentoval.
AuthenticatorFront.php
<?php
use Nette\Security as NS;
class AuthenticatorFront extends Nette\Object implements NS\IAuthenticator
{ ...
public function authenticate(array $credentials)
{ ... return new NS\Identity($row->id, NULL, $row->toArray()); }
... }
?>
problém teď nastane takový, že pokuď se snažím přihlásit z HomepagePresenter.php tak se mi zavolá původní Authenticator.php, který vrátí špatné přihlašovací údaje.
Jak mohu svůj kód upravit aby to fungovalo a je takové řešení správné ? Děkuji :)
Editoval muflix (18. 10. 2012 19:07)
- muflix
- Člen | 92
Felix: aha no, to by asi bylo jednodušší, akorát bych do toho musel přidělat role což je jen druhý parametr
<?php
return new NS\Identity($row->id, NULL, $row->toArray());
?>
jestli to chápu dobře :) tak to vyzkoušim ještě, ikdyž asi né hned.
jinak sem ještě zkoušel upravit to moje podle
https://forum.nette.org/…-funkcni-ale#…
a už se mi daří se přihlásit přes ten druhý authenticator, ale nevím jak
si vypsat údaje o uživately, protože
<?php
$user->getIdentity()->login
?>
mi píše
‚Notice : Trying to get property of non-object‘ tak nevím, jestli musím
někde definovat ještě jakej auth použít :P:) ale jinak moc díky, zkusím
vytvořit authenticate2(…) kde změnim db tabulku a přiřadim
jinou roli.
Editoval muflix (18. 10. 2012 20:22)