přesměrování formuláře z http na https, callback

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

Zdravím vás,
zkouším ovládnout Nette a zkouším jím řešit věci, které jsem dělal „po staru“ . Vím, že některé věci níže uvedené zde již byly uvedeny, ale nevim jaký je nejlepší možný postup dnes (z důvodu vylepšování Nettte).

Situace, kterou se s pomocí Nette vyřešit je:

Mám login formulář, který je zobrazen na všech presenterech . Pro logování potřebuji odeslat pod protokolem HTTPS formulář na jiný presenter, který provede ověření uživatele a případné zalogovoání.
V případě, že se jedná o uživatele s vyšším oprávněním potřebuji, aby bylo vyžadována komunikace pod https a pro uživatele s nižším oprávněním ponechat komunikaci pouze pod http.

Prozatím jsem do basepresenteru napsal funkci pro formulář:

protected function createComponentLoginForm()
	{
		$form = new Form();

		$form->setAction('Login/prvdlgn');
		$form->setMethod('POST');

		$form->addText('usrnm', 'Jméno:', 10, 10 )
			->addRule(Form::FILLED, 'Je nutné zadat uživatelské jméno.') ;
		$form->addPassword('syetrt', 'Heslo:', 10, 10 )
			->addRule(Form::FILLED, 'Je nutné zadat heslo.');
		$form->addSubmit('crgts', 'Přihlásit');

		return $form;

	}

a přes @default.latte jsem jej jej vykreslil.

{form loginForm}
	<table >
		<tr >
			<th><font class="logincapt">Přihlášení</font></th>
			<td>{input usrnm class=> logintxt }</td>
			<td>{input syetrt class=> logintxt }</td>
			<td>{input crgts  class=> loginbtn}</td>
		</tr>
	</table>
{/form}

Problém č.1: Jde odeslání dat z http pod https udělat elegantněji než přes novou položku v routeru viz převzaté řešení?:

$container->router[] = new Route('login/prvdlgn', array('presenter' => 'Login','action' => 'prvdlgn') , Route::SECURED);//

Problém č.2 : Jde vůbec zajistit, aby se v případě, kdy formulář odesílá data do jiného presenteru a pod jiným protokolem, dala použít automatická validace a odchycení události/signálu „onSuccess“ spolu s příslušným callback em ? něco jako:
$form->onSuccess[] = callback($Login, ‚newTasklistFormSubmitted‘);

Podle mne by to mělo jít, jen nevím jak, pokud ne, pak by to člověk mohl dělat postaru (rúčo).

Problém č.3 : Jestliže mi Login presenter provede kontrolu uživatele a zjistí, že neexistuje, jak předat získané chybové hlášení do formuláře basepresenteru, abych toto chybové hlášení mohl v @default.latte vypsat? (vypsání není v příkladu uvedeno, ale vypsat chyby umím).

Problém č.4: Všiml jsem si, že javascriptová kontrola na straně uživatele funguje kupř v CHROME , ale nefunguje v IE 9. Vcelku osobně javasciptovou kontrolu moc neuznávám, protože se oni opřít nedá, ale zajímalo by mne, jak to odstranit. Vysvětlovat uživateli, že v jednom prohlížeči to funguje a v druhém ne, je v dnešní době pasé.

Problém č. 5 : V případě, že se jedná o uživatele s vyšším oprávněním potřebuji, aby bylo vyžadována komunikace pod https a pro uživatele s nižším oprávněním ponechat komunikaci pouze pod http. Toto nevím, jak toho dosáhnou a poprosil bych o radu.

Děkuji za odpovědi .

Editoval pernip01 (19. 3. 2012 0:39)

Jan Endel
Člen | 1016
+
0
-
  1. žel, nic elegantnějšího mě nenapadá, jak formulář donutit posílat HTTPS, než jak jsi nastínil ty.
  2. viz níže
  3. Takovýto problém se většinou řeší tak, že celý formulář i s příslušnou metodou po odesílání se dá do předka všech presenterů kterých se to týká/vlastní třídy/samostatné komponenty. Takže není zapotřebí dělat čachry a volat to tedy ne nad jiným ale nad stávajícím presenterem. Chyby pak vypíšeš snadno přes addError('foo isn't filled');.
  4. Ukaž jak ji provádíš, teď jsem ji testoval ve svojí aplikaci a v IE9 se mi normálně zobrazí.
  5. Toho rozumnou cestou nedosáhneš, protože ty odešleš data a teprve potom můžeš zjistit, jestli jde o uživatele s nízkým nebo vysokým oprávněním, osobně bych to vše tahal přes HTTPS (pokud jsem tě pochopil správně).
pernip01
Člen | 21
+
0
-

Díky za odpověď,

k 2.: To si myslím, že dělám tim, že jsem vytvořil

protected function createComponentLoginForm()
.
.

v basepresenteru.

jenže takto mi pak nereaguje validace a tudíž ani ten callback
příklad:
$form->onSuccess[] = callback($Login, ‚newTasklistFormSubmitted‘);

nebo je ještě něco nad basepresenterem co se dá použít?

Jan Endel
Člen | 1016
+
0
-

a jak plníš proměnnou $Login?

Editoval pilec (20. 3. 2012 10:02)