Jakou metodiku zvolit pro přihlašování
- Joacim
- Člen | 229
Mám LoginPresenter a Authenticator (Nette\Security\IAuthenticator).
V login presenteru si hlídám, zda se jedná o povolený prohlížeč (Model
Browser), pokud ne beforeRender mě přesune na nosupported.latte. Model Browser
používám, ale i v Authenticator v metodě authenticate, kde pokud se
uživatele přihlásí a načítám si z db další info ukládám i info
o uživatelově IP adrese, prohlížeči atd:.
Takže zajímá mě, jestli si mám v konstruktoru LoginPresenter i Authenticator přidat Browser model, napsat si další model pro login (LoginModel, kde bych se dotazoval zda se jedná o povolený prohlížeč, zda uživatel není banován atd ?) a nebo zda je čistší jiný způsob. Volat v LoginPresenteru ->Authenticator se mi nechce.
class LoginPresenter extends BasePresenter {
/** @var \App\Model\BrowserInfo */
private $browserInfo;
public function __construct(\App\Model\BrowserInfo $browserInfo) {
$this->browserInfo = $browserInfo;
}
public function renderDefault() {
$this->browserInfo->Browser();
// Block Internet Exploler 9 and older
if ($this->browserInfo->getBrowser() == $this->browserInfo->isBrowser('Internet Explorer') && $this->browserInfo->getVersion() <= 9) {
$this->template->block = TRUE;
} else {
$this->template->block = FALSE;
}
$this->template->ban = false; // $this->isBanned();
}
class Authenticator extends BaseModel implements Nette\Security\IAuthenticator {
const BAN_TIME = 15; // BAN time in minutes
/** @var Nette\Http\Session */
private $session;
/** @var Nette\Http\SessionSection */
private $sessionSection;
/** @var \App\Model\BrowserInfo */
private $browserInfo;
public function __construct(\Nette\Database\Context $database ,Nette\Http\Session $session, \App\Model\BrowserInfo $browserInfo) {
parent::__construct($database);
$this->session = $session;
$this->browserInfo = $browserInfo;
// Získáme přístup do sekce 'login_restricted':
$this->sessionSection = $session->getSection('login_restricted');
// Proměnná $section->login_restricted vyexpiruje při zavření prohlížeče
$this->sessionSection->setExpiration('30 minutes', 'login_restricted');
}
V LoginModel bych si v konstruktoru volal (Browser) a mel by metodu
isBaned(), tento model bych si pak volal v loginpresenteru a dotazoval se zda
je prohlížeč povolen a pokud ano ptal bych se zda IP adresa není blokována.
Tento model bych též zavolal v konstruktoru Authenticator, kde bych
zaznamenal pokus o přihlášení, a kdyby se uživatel uspěšně přihlásil
uložil bych jeho informace o prohlížeči atd:.
V Authenticator mám ted metody pro zjištění zda je uživatel banován a
metodu pro uložení pokusu pro přihlášení
Jedná se o to jak nejlépe logicky rozložit třídy a jejich
volání, děkuji
Editoval Joacim (25. 1. 2016 14:15)
- CZechBoY
- Člen | 3608
Ty metody na login bych nechal klidně u toho autentizátoru, přecijen to s tím souvisí. To asi záleží na tobě kolik toho bude.
Na upozornění, že má uživatel starej/blbej prohlížeč (jestli jsem dobře pochopil co chceš udělat) bych si asi udělal komponentu a té bych předal služby, které umí detekovat prohlížeč a prohlásit, že tenhle a tenhle prohlížeč chci označit jako deprecated.
btw. Co dělá metoda BrowserInfo::Browser()? :-))
- Joacim
- Člen | 229
CZechBoY napsal(a):
Ty metody na login bych nechal klidně u toho autentizátoru, přecijen to s tím souvisí. To asi záleží na tobě kolik toho bude.
Na upozornění, že má uživatel starej/blbej prohlížeč (jestli jsem dobře pochopil co chceš udělat) bych si asi udělal komponentu a té bych předal služby, které umí detekovat prohlížeč a prohlásit, že tenhle a tenhle prohlížeč chci označit jako deprecated.
btw. Co dělá metoda BrowserInfo::Browser()? :-))
http://apptools.com/…ols/browser/ Pro staré prohlížeče mám nosupport.latte kde jsou odkazy na novejší prohlížeče a prohlášení (zatím to mám v jednom default.latte a v něm mám if else (banned, nosupport atd))
Není tedy proti pravidlům, abych si v LoginPresenteru přes konstruktor volal Authenticator (kde je logika pro přihlášení) a v něm měl metody isBanned() a recordAttempt(). V Authenticator bych si přes konstruktor volal jen Browser ?
Editoval Joacim (25. 1. 2016 15:14)