SimpleIdentity špatné heslo HASH
- mimacala
- Člen | 113
Ahojte,
prosím začlo mi to házet error při přihlášení Invalid password, nedaří
se mi dopracovat k tomu jestli to správně kontroluje heslo:),
public function authenticate(string $email, string $password): SimpleIdentity
{
$row = $this->database->table('uzivatele')
->where('email', $email)
->fetch();
if (!$row) {
throw new Nette\Security\AuthenticationException('User not found.');
}
if (!$this->passwords->verify($password, $row->heslo)) {
throw new Nette\Security\AuthenticationException('Invalid password.');
}
return new Nette\Security\SimpleIdentity($row->id, $row->role);
}
}
public function create(): Form
{
$form = new Form;
$form->addEmail('email', 'Email:');
$form->addPassword('heslo', 'Heslo:');
$form->addSubmit('send', 'Přihlásit');
$form->onSuccess[] = [$this, 'OnSucceeded'];
return $form;
}
public function OnSucceeded(Form $form,$data): void
{
$identity = $this->kontrola->authenticate($data->email, $data->heslo);
$this->user->login($identity);
}
}
Password verify nic nedělá vrací bool ale nikde hash neodkrývá, takže mi to moc nedává smysl.
function password_needs_rehash(string $hash, string|int|null $algo, array $options = []): bool {}
/**
* Checks if the given hash matches the given options.
* @link https://secure.php.net/manual/en/function.password-verify.php
* @param string $password The user's password.
* @param string $hash A hash created by password_hash().
* @return bool Returns TRUE if the password and hash match, or FALSE otherwise.
* @since 5.5
*/
function password_verify(string $password, string $hash): bool {}
/**
* Return a complete list of all registered password hashing algorithms.
* @return string[]
* @since 7.4
*/
function password_algos(): array {}
// End of password v.
Jinak pokud použiji 11 12 jak systém pozná co jsem zadal ? Je možné že je něco špatně nastavené ?
$passwords = new Passwords(PASSWORD_BCRYPT, ['cost' => 10]); // 11 12 nebo 10 je jedno nebo musím ještě něco někde upravit ?
$res = $passwords->hash($data->password);
Moc děkuji za případnou pomoc
- Marek Bartoš
- Nette Blogger | 1280
Password verify nic nedělá vrací bool
Jak nic nedělá? Pokud heslo odpovídá hashi, tak vrací true, jinak false
Jinak pokud použiji 11 12 jak systém pozná co jsem zadal ?
Nastavení algoritmu je součástí vygenerovaného hashe, viz https://github.com/…c-sf-spec.md
Tím že jsi nastavení pro nové hashe změnil se ti nic nerozbije
Editoval Marek Bartoš (28. 7. 2022 22:31)
- mimacala
- Člen | 113
Aha, jasné, pak tedy nechápu proč mi verify vrací false, v DB mám varchar 255 znaků, takže to je také v pořádku.
EDIT: V kódu jako takovém vypadá vše ok ? Děkuji
EDIT2: Zkusil jsem kód zjednodušit, ale stejný problém musím něco
přehlížet :)
use Nette;
use App\Components\Formulare\FormularPrihlaseni;
use Nette\Application\UI\Form;
use App\model\Kontrola;
use Nette\Database\Explorer;
class PrihlaseniPresenter extends Nette\Application\UI\Presenter
{
public function __construct(
private FormularPrihlaseni $formularPrihlaseni,
private Kontrola $kontrola,
private Explorer $db,
private Nette\Security\Passwords $passwords,
)
{
}
public function renderPrihlasit()
{
$this->setLayout('LogRegLayout');
}
public function actionOut(): void
{
$this->getUser()->logout(true);
$this->flashMessage('Odhlášení bylo úspěšné.', "success");
$this->redirect("Homepage:", );
}
public function createComponentPrihlasit()
{
$form = new Form;
$form->addEmail('email', 'Email:');
$form->addPassword('heslo', 'Heslo:');
$form->addSubmit('send', 'Přihlásit');
$form->onSuccess[] = [$this, 'OnSucceeded'];
return $form;
}
public function OnSucceeded(Form $form,$data): void
{
$row = $this->db->table('uzivatele')
->where('email', $data->email)
->fetch();
if (!$row) {
throw new Nette\Security\AuthenticationException('User not found.');
}
if ($this->passwords->verify($data->heslo, $row->heslo) == true) {
$identity = new Nette\Security\SimpleIdentity($row->id, $row->role);
$this->user->login($identity);
} else {
throw new Nette\Security\AuthenticationException('Invalid password.');
}
}
}
Jak bych mohl heslo zpátky převěst z hashe pro kontrolu správného uložení ? Děkuji
Editoval mimacala (28. 7. 2022 23:07)