Problém s ověřením hesla přes Nette\Security\Passwords
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Scorpio
- Člen | 45
Zdravím narazil jsem na problém s ověřením hesla a nevím kde je chyba. Používam Nette 2.2.2 a již vytvořenou UserManager třídu.
// App/Model/UserManager.php //
/**
* Performs an authentication.
* @return Nette\Security\Identity
* @throws Nette\Security\AuthenticationException
*/
public function authenticate(array $credentials) {
list($username, $password) = $credentials;
$row = $this->database->table(self::TABLE_NAME)->where(self::COLUMN_NAME, $username)->fetch();
if (!$row) {
throw new Nette\Security\AuthenticationException('The username is incorrect.', self::IDENTITY_NOT_FOUND);
} elseif (!Passwords::verify($password, $row[self::COLUMN_PASSWORD_HASH])) {
throw new Nette\Security\AuthenticationException('The password is incorrect.', self::INVALID_CREDENTIAL);
} elseif (Passwords::needsRehash($row[self::COLUMN_PASSWORD_HASH])) {
$row->update(array(
self::COLUMN_PASSWORD_HASH => Passwords::hash($password),
));
}
$arr = $row->toArray();
unset($arr[self::COLUMN_PASSWORD_HASH]);
return new Nette\Security\Identity($row[self::COLUMN_ID], $row[self::COLUMN_ROLE], $arr);
}
K vytvoření uživatele mám toto:
// App/Model/User.php //
namespace App\Model;
use Nette,
Nette\Security\Passwords;
class User extends Nette\Object {
/** @var Nette\Database\Context */
private $database;
public function __construct(Nette\Database\Context $database) {
$this->database = $database;
}
public function add($data) {
$this->database->table('user')->insert(array(
"role" => 'user',
"name" => $data['name'],
"password" => Passwords::hash($data['password']),
"email" => $data['email'],
"hash" => uniqid(),
));
}
}
Takřka nic sem neměnil jen se přihlašuju na email.
Když vytvořím uživatele a pak se chci přihlásit stále hlasí chybné
heslo.
Netuším kde by mohla být chyba.