Jakou metodiku zvolit pro přihlašování

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

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

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

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)