Zamezení přímého přístupu na stránku
- Azathoth
- Člen | 495
Zdravím,
hodně jsem hledal, ale buď jsem hledal špatně a nebo se tady tím opravdu
nikdo nezabýval.
Mohu nějak v nette udělat omezení, aby mi uživatelé nechodili na nějakou
stránku přímo, ale aby se na ni mohli dostat pouze v případě, že na ni
budou přesměrováni? Například po dokončení registrace by byl uživatel
přesměrován na stránku, která mu oznámí, že byl úspěšně
zaregistrován, ale nechci, aby měli uživatelé možnost se na tu stránku
dostat tak, že naťukají url té stránky.
Vím, že něco takového jde přes .httaccess, ale chtěl bych to mít hezky
přehledně v nette, že by existoval nějaký abstract OnlyRedirectPresenter,
který by to obstarával.
Děkuji za všechny rady.
- David Kudera
- Člen | 455
No pokud je to fakt potřeba, tak bych to asi zkusil řešit přes session. Uložit si prostě nějakou proměnnou „jdu ze stránky registrace“ a na té „skryté“ stránce si existenci téhle proměnné zkontrolovat. Samozřejmě nějak šikovněji než jen tak, jak jsem to napsal :-)
A vlastně si z toho můžeš vytvořit i nějakou obalující službu.
A nebo třeba jen nějakou metodu v presenteru, která tu proměnnou před redirectem uloží a v cílové akci by se to dalo zkombinovat třeba s anotacemi a metodou checkRequirements v nějakým base presenteru.. Je to jen nápad z hlavy a třeba by se ukázalo, že je to nesmysl, ale přijde mi to zajímavý.
Jé a vlastně by to šlo ještě víc zautomatizovat. Např. si trochu nehezky uložit tu proměnnou v každé startup metodě jako název presenteru a akce.
public function startup()
{
parent::startup();
$session->previousPage = $this->getAction(true);
}
A pokud bych to měl přes ty anotace, tak skryté akce by mohli být třeba takhle:
/**
* @allowFrom(":User:SignUp")
*/
public function actionSignUpSuccess()
{
}
stačilo by na to jen rozšířit metodu checkRequirements a otestovat ten zápis anotací, aby se správně rozparsoval (nejsem si jistý těma uvozovkama a taky by to mělo brát pole předchozích akcí).
Edit: jen nevýhodou by mohlo být více otevřených tabů..
Editoval David Kudera (15. 8. 2014 19:53)
- Azathoth
- Člen | 495
A jak například dělat ty vstupní podmínky? Jediné, co mne napadá, je plnění nějakých session proměnných…a to je přesně to, co navrhuje @DavidKudera. Nebo by to šlo nastavováním nějakých property u Identity, ale to mi pořád přijde trochu neelegantní.
Ono vlastně to přesměrování při nesplnění určitých podmínek by bylo to, co bych chtěl. Akorát jsem chtěl vědět, jestli nette má nativní podporu zjištění, jestli přišel uživatel přes redirect nebo to budu muset dělat sám přes $httpRequest->getReferer();
Editoval Azathoth (15. 8. 2014 21:00)
- David Kudera
- Člen | 455
Tak ono ani moje řešení není elegantní.. Třeba plní tu session vždy, i když to nakonec bude využito třeba jen u procenta případů. Ale i „pocitově“ (nechytejte se za hlavu prosím :-D) je to minimálně „trochu divný“.. Proto i moje první věta je: „pokud je to fakt nutný“. Nakonec ale jestli je to požadavkem, tak bych asi řekl proč ne..
Editoval David Kudera (15. 8. 2014 20:57)