Overenie spravnosti hesla

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

Zdravím,
Potrebujem overiť zadané heslo už prihláseného užívateľa tak aby po jeho odoslaní následoval redirect a odhlásenie. ale neviem ako overiť iba to heslo cez ktoré je prihlásený.
Môj presenter

/**
	* DeactivateForm factory.
	* @return Form
	*/
	protected function createComponentDeactivateForm() {
		$deactiveForm = new Form;
		$deactiveForm->addPassword('client_password', Html::el()->setHtml("Heslo<span class='red'>*</span>"));
		$deactiveForm->addSubmit('deactivateBtn', 'Zatvoriť Účet');
		$deactiveForm->getElementPrototype()->id = "reg_form";
        $deactiveForm->onSuccess[] = $this->deactivateFormSuccessSubmited;
        return $deactiveForm;
	}
	/**
	* @param Form $deactivateForm
	*/
	public function deactivateFormSuccessSubmited(Form $deactiveForm) {
		$values = $deactiveForm->getValues();
		if(Čo Sem Dať pre porovnanie?) {
			$this->userRepository->updateStatus($client_status);
			$this->redirect('prihlasenie');
		} else {
			$deactiveForm->addError('Neplatné heslo');
		}
	}
Aurielle
Člen | 1281
+
0
-

Jednoduše budeš ověřovat heslo stejným způsobem jako při přihlášení, uživatel se ti totiž může přihlásit pouze tím jedním heslem. Což znamená vzít heslo od uživatele, prohnat ho hashováním, solením, bryptem nebo co vlastně používáš, a porovnat s hashem v databází. „iba to heslo cez ktoré je prihlásený“ je v tomhle kontextu tedy nesmysl.

Jiří Nápravník
Člen | 710
+
0
-

Vytahnes uzivatele z databaze, podle mailu, ci loginu, ci co pouzivas. A do toho ifu das:

if($userFromDb['password'] === alogritmusKterymPocitasHashHesla($hesloZFormulare))
Azathoth
Člen | 495
+
+2
-

a co použít password třídu? https://api.nette.org/…sswords.html

SontoEremo
Člen | 341
+
0
-

Jiří Nápravník napsal(a):

Vytahnes uzivatele z databaze, podle mailu, ci loginu, ci co pouzivas. A do toho ifu das:

if($userFromDb['password'] === alogritmusKterymPocitasHashHesla($hesloZFormulare))

Používam klasické userManager zo Sandboxu
Fuuu nejak mi to nejde :)

$passFromDb = $this->userRepository->findAll()->where('client_password');
		if($passFromDb['client_password'] === Passwords::hash($values->client_password)) {
			echo "OK";
		} else {
			echo "BAD";
		}
one-two
Člen | 80
+
0
-

musíš použít Passwords::verify

Editoval one-two (5. 12. 2014 12:35)

Jiří Nápravník
Člen | 710
+
0
-

Pokud použííváš pro generování hesla Passwords::hash, tak pro kontrolu použij Passwords::verify, tedy

if(Passwords::verify($values->client_password, $passFromDb['client_password']))