Quick Starts – problém s přihlášením
- CJHornster
- Člen | 56
Zdar lidi, s nette začínám a dostal sem se přes quickstart až ke kapitole s přihlášením (dalo mě to dost zabrat vzhledem k tomu, že to co je na gitu je uplně jiný než v quickstartu a upřímně musim říct, že je to ten nejde*ilnější návod co sem kdy čet :D ale Nette musím pochválit :D)
No k mému problému, vubec mě nejede přihlašování, jména mám Jon Doe a Jane Doe (z SQL dat z první kapitoly), ale neznám hesla :( když napíšu blbě heslo, tak mě to hodí výjmku AuthenticationException
Zde je kod:
<?php
namespace Todo;
use Nette,
Nette\Security,
Nette\Utils\Strings;
/**
* Users authenticator.
*/
class Authenticator extends Nette\Object implements Security\IAuthenticator
{
/** @var UserRepository */
private $users;
public function __construct(UserRepository $users)
{
$this->users = $users;
}
/**
* Performs an authentication.
* @return Nette\Security\Identity
* @throws Nette\Security\AuthenticationException
*/
public function authenticate(array $credentials)
{
list($username, $password) = $credentials;
$row = $this->users->findByName($username);
if (!$row) {
throw new Security\AuthenticationException('The username is incorrect. FUCK', self::IDENTITY_NOT_FOUND);
}
if ($row->password !== $this->calculateHash($password, $row->password)) {
throw new Security\AuthenticationException('The password is incorrect. FUCK', self::INVALID_CREDENTIAL);
}
unset($row->password);
return new Security\Identity($row->id, NULL, $row->toArray());
}
/**
* @param int $id
* @param string $password
*/
public function setPassword($id, $password)
{
$this->users->findBy(array('id' => $id))->update(array(
'password' => $this->calculateHash($password),
));
}
/**
* Computes salted password hash.
* @param string
* @return string
*/
public static function calculateHash($password, $salt = NULL)
{
if ($password === Strings::upper($password)) { // perhaps caps lock is on
$password = Strings::lower($password);
}
return crypt($password, $salt ?: '$2a$07$' . Strings::random(22));
}
}
prakticky to co je na gitu, ale když zakomentuju ten blok if ($row) a if (!$row) tak mě to hodí výjmku Trying to get property of non-object
- doufal jsem, že to nehodí vyjmku, ale pouze to vypíše, že jste zadaly špatné uživatelské jméno nebo heslo
můžete mi nějak pomoct? už jsem udělal takovejch úprav, že jsem v tom ztracen
- jiri.pudil
- Nette Blogger | 1032
doufal jsem, že to nehodí vyjmku, ale pouze to vypíše, že jste zadaly špatné uživatelské jméno nebo heslo
To už ale není zodpovědnost Authenticatoru. Tam, kde voláš metodu authenticate (tzn. při zpracování přihlašovacího formuláře v presenteru) bys měl výjimku odchytit a eventuelně vypsat chybovou hlášku. Tak to je ostatně v quickstartu napsané.
Btw nejaktuálnější quickstart je ten anglický
- CJHornster
- Člen | 56
no když to odkomentuji, tak mě laděnka vyhodí výjmku, ale jinak v Presenteru mám vše dobře, neměl by tedy presenter výjmku odchytit?
moc díky za anglickej tutoriál předělal jsem presenter podle english
verze a vše jde v pořádku ;)
jen by mě zajímaly ty hesla :D
Editoval CJHornster (27. 6. 2013 15:00)