Login form vlastní javascript
- Томас
- Člen | 85
Dobrý den, snažím se zprovoznit přihlašovací formulář pomocí Nette a moc se mi to nedaří kůli javascriptu. Jde o to, že potřebuji aby heslo a účet museli být vyplněny.
zjednodušený přihlašovací formulář
$this->addText('account', 'účet:')
->setRequired('Účet musí být vyplněn!');
$this->addPassword('password', 'heslo:')
->setRequired('Heslo musí být vyplněno!');
$this->addSubmit('send', 'přihlásit')
->getControlPrototype()
->onClick('foo()');
$this->addHidden('sha_password');
$this->addHidden('key');
To mám tedy formulář, který obsahuje účet, heslo, klíč právě vygenerovaného formuláře a sha_password kam potom vložím heslo, které se zahashuje na straně klienta.
Teď mám nějakou šablonu v které je následující script:
<script src="{$basePath}/js/sha512-min.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
function foo()
{
$("#frm-adminLoginForm input[name=sha_password]").val(
hex_sha512($("#frm-adminLoginForm input[name=password]").val(),
$("#frm-adminLoginForm input[name=key]").val())
);
$("$frm-adminLoginForm input[name=password]").prop("disabled", true);
}
</script>
a právě tady nastane problém. Jelikož se validace formuláře provede až po mém scriptu tak v tu dobu už je pole s heslem „vypnuto“. Nette mi vrátí, že musím vyplnit heslo. Já samozřejmě potřebuji, aby se mi heslo neposílalo, chci jen to zahashované. Jde nějakým způsobem provést můj script až po validaci nette forms? Předem díky! :)
- Oli
- Člen | 1215
akadlec: Záleží na tom jak moc bereš bezpečnost vážně. Respektive jak moc je pro tebe důležitá. Pro osobní blog to asi potřeba není. Pro nějakou službu, která zpracovává osobní/citlivá data už je bezpečnost poměrně zásadní parametr.
Jde o to, že když nemáš HTTPS a chceš se připojit například přes veřejnou wi-finu, tak všichni můžou koukat co posíláš v hlavičce. Můžou teda koukat co posíláš v POST. Pokud nemáš šifrování pomocí js, tak se heslo a jméno posílá v plain textu a až na serveru hashuje. Proto bych taky považoval HTTPS za poměrně důležitej faktor bezpečnosti ;-)
- Томас
- Člen | 85
Ahoj, jop sorry. Vyřešil jsem to tak, že jsem si formulář napsal sám. Zjednodušeně
<form n:name="MujForm" onSubmit="validate()">
<label n:name="account">Jméno:</label>
<input n:name="account"/>
<label n:name="password">Heslo:</label>
<input n:name="password"/>
<input n:name="send"/>
</form>
Všechny validační pravidla a podobně z komponenty se mi doplňí do tohodle formu + mám k tomu ten submit event. Přes jednu část problému sem se ale stále nedostal. Pomocí javascriptu samozřejmě potřebuji vzít heslo, které zahashuju s unikátním klíčem formuláře do sebe a uložit ho do nějakého hidden inputu. To není problém, problém nastane až když nastavím password input jako disabled… aby se mi neposílal na server, ale jen to moje zahashované heslo. V mé komponentě s formulářem nesmí být password required protože nikdy vyplněn nebude. Já bych ho ale required chtěl a nechci to řešit přímo v tom scriptu ale v komponentě toho formuláře. Nejde to nějak jednoduše obejít? Nebo se s tím mám naučit žít? :D
- Mesiah
- Člen | 240
Томас napsal(a):
Ahoj, jop sorry. Vyřešil jsem to tak, že jsem si formulář napsal sám. Zjednodušeně
<form n:name="MujForm" onSubmit="validate()"> <label n:name="account">Jméno:</label> <input n:name="account"/> <label n:name="password">Heslo:</label> <input n:name="password"/> <input n:name="send"/> </form>
Všechny validační pravidla a podobně z komponenty se mi doplňí do tohodle formu + mám k tomu ten submit event. Přes jednu část problému sem se ale stále nedostal. Pomocí javascriptu samozřejmě potřebuji vzít heslo, které zahashuju s unikátním klíčem formuláře do sebe a uložit ho do nějakého hidden inputu. To není problém, problém nastane až když nastavím password input jako disabled… aby se mi neposílal na server, ale jen to moje zahashované heslo. V mé komponentě s formulářem nesmí být password required protože nikdy vyplněn nebude. Já bych ho ale required chtěl a nechci to řešit přímo v tom scriptu ale v komponentě toho formuláře. Nejde to nějak jednoduše obejít? Nebo se s tím mám naučit žít? :D
Teoreticky můžeš dát do definice formuláře podmínku ve stylu: „když
bude vyplněný hidden, tak nepožaduj vyplněné heslo“.
Nebo při submitu nastav heslo na nějaký ultimátní řetězec a pokud bys na
serveru dostal něco jiného, pak víš, že odesilatel má vypnutý javascript,
ale tohle řešení je myslím takové nehezké…