Vytvoření hashe pro přihlášení uživatele
- pastyx
- Člen | 25
Dobrý den,
v nette jsem absolutní začátečník a po projetí „vytvořte první aplikaci“ jsem se rozhodl prohloubit znalosti v přihlašování a rolích uživatelů a snažím se postupovat podle postupu zde https://doc.nette.org/…thentication
Problém je v tom že nedovedu do databáze vložit správný otisk hesla. V dokumentaci je psané že ve sloupci password je otisk – bcrypt hesla (předpokládám toho co píšu do přihlašovacího formuláře). Snažím se tedy pomocí admineru vytvořit údaje pro přihlášení a tak jsem pro vygenerování hashe využil http://bcrypthashgenerator.apphb.com/
Bohužel se zdá že vygenerovaný hash není pro zadaný vstup vždy stejný (pravděpodobně se to solí). Zajímalo by mě tedy jak si mám takový hash který vložím do db vygenerovat aby mi fungovalo přihlašování a ověření přes db přesně jako v uvedeném příkladu v dokumentaci.
Děkuji za pomoc.
Takto vypadá můj kód:
<?php
namespace App\Presenters;
use Nette;
use Nette\Security as NS;
class MyAuthenticator extends Nette\Object implements NS\IAuthenticator
{
public $database;
function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
function authenticate(array $credentials)
{
list($username, $password) = $credentials;
$row = $this->database->table('users')
->where('username', $username)->fetch();
if (!$row) {
throw new NS\AuthenticationException('User not found.');
}
if (!NS\Passwords::verify($password, $row->password)) {
throw new NS\AuthenticationException('Invalid password.'.NS\Passwords::hash("heslo"));
}
return new NS\Identity($row->id, $row->role, array('username' => $row->username));
}
}
Při výpisu chyby si nechám vypsat výsledek funkce hash který vložím do databáze a poté se přihlašuji za využití hesla heslo a bohužel to nefunguje.
Editoval pastyx (14. 8. 2015 11:31)
- ZahorskyJan
- Člen | 59
Jestli se nepletu, tak v sandboxu je v rootu složka bin ve které jejediný skript create-user.php, který je tam přesně kvůli tomu co řešíte = vytovření uživatele s heslem. Je napsaný pro spouštění z příkazové řádky. Když se podíváte do toho skriptu, jak se uživatel tvoří, bude Vám vše hned jasné. Parametry jsou login a heslo.
- Mysteria
- Člen | 797
Pokud používáš pro hashování třídu Nette\Security\Passwords, tak si třeba kdekoliv vypiš
Nette\Security\Passwords::hash('myPassword')
a vygenerovaný hash vlož do databáze.
- David Matějka
- Moderator | 6445
musis to pak overovat pomoci metody verify, nikoliv ==
. Stejne
jako je to
v sandboxuhttps://github.com/nette/sandbox/blob/master/app/model/UserManager.php#L46
- David Matějka
- Moderator | 6445
musis to pak overovat pomoci metody verify, nikoliv ==
. Stejne
jako je to v sandboxu https://github.com/…rManager.php#L46
- Pavel Kravčík
- Člen | 1196
A máš dostatečně „velký“ sloupec v DB? Neořezává se Ti část? A pak to porovnání bude FALSE.
- ZahorskyJan
- Člen | 59
Je to závislé na App\Model\UserManager, u kterého volá metodu add(), takže pokud UserManager má nějakou svoji autentikaci, měl by zajistit i správné vytvoření nového uživatele a skript create-user.php by se neměl měnit.