Po přihlášení prázdná identity
- Mesiah
- Člen | 240
Zdravícko,
chvíli jsem nedělal s nette a už mám problém. Jedná se o přihlášení – po přihlášení mám v identity jen „guest“ a dost dobře nevm proč, můžete mi prosím poradit?
<?php
public function loginFormSubmitted($form)
{
$values = $form->values;
if ($values['remember']) {
$this->getUser()->setExpiration('+ 14 days', FALSE);
} else {
$this->getUser()->setExpiration('+ 20 minutes', TRUE);
}
$this->getUser()->login($values['username'], $values['password']);
$this->flashMessage('Byl jste úspěšně přihlášen.');
$u = Environment::getUser();
dump($u);
//$this->redirect(':Admin:Homepage:default');
}
?>
a usersmodel:
<?php
public function authenticate(array $credentials)
{
$username = $credentials[self::USERNAME];
$password = md5($credentials[self::PASSWORD]);
$row = dibi::fetch('SELECT * FROM user WHERE login=%s', $username);
if (!$row) {
throw new AuthenticationException("živatel '$username' nebyl nalezen.", self::IDENTITY_NOT_FOUND);
}
if ($row->password !== $password) {
throw new AuthenticationException("Špatné heslo, zkuste jiné.", self::INVALID_CREDENTIAL);
}
unset($row->password);
$identity = new Identity($row->id, $row->role, $row);
return $identity;
}
?>
- Mesiah
- Člen | 240
Co se týká metody loginFormSubmitted, tak tam nijak neiinicializuju, jedna
se jen o počeštěný Login presenter přímo v distribuci to stejný pro
authenticate, jde o počeštěný model UsersModel…
A co tam mám – mám tam objekt Identity, ale s uživatelem Guest, ačkoli
UsersModel vytvoří instanci Identity a vrátí ji…
- Tharos
- Člen | 1030
To je opravdu zvláštní, v rychlosti jsem to ověřil v sandboxu a funguje to korektně.
Jen mě tak napadlo – neinterpretuješ špatně ten dump? Ono totiž když si dumpneš třídu User, výstup vypadá následovně:
NUser(8) {
"guestRole" => "guest" (5)
"authenticatedRole" => "authenticated" (13)
"onLoggedIn" => NULL
"onLoggedOut" => NULL
...
To questRole
nahoře ale neznamená, že v Identity je
aktuálně role quest. Vyzkoušej spíš
dump(Environment::getUser()->getIdentity())
.
Editoval Tharos (19. 1. 2011 10:03)
- fejtis
- Člen | 16
Zdravím, mám podobný problém jako kolega ale mě objekt Identity vrací pouze NULL.
public function loginFormSubmitted(AppForm $form){
if($form->isSubmitted()){
$myAuth = new \MyAuthenticator();
$values = $form->getValues();
$username = $values['email'];
$password = $values['password'];
try{
$myAuth->authenticate(array($username, $password));
//$this->redirect('Katalog:default');
}
catch (AuthenticationException $ex){
}
}
}
class MyAuthenticator extends Nette\Object implements Nette\Security\IAuthenticator {
public function authenticate(array $credentials) {
$username = $credentials[self::USERNAME];
$password = sha1($credentials[self::PASSWORD]);
$row = dibi::fetch("SELECT id, email, password FROM eshop_users WHERE email = '$username'");
if(!$row) // user not found
throw new AuthenticationException('Uživatel '.$username.' neexistuje', self::IDENTITY_NOT_FOUND);
if($row->password !== $password) // hesla se neshoduji
throw new AuthenticationException ('Zadali jste špatné heslo', self::INVALID_CREDENTIAL);
$identity = new Identity($row->id, 'guest', array(
'email' => $row->email
));
return $identity;
}
a dumpuju pres dump(\Nette\Environment::getUser()->getIdentity());
Pres podminky prihlaseni to normalne projde, ale identita se nenastavi.
Diky za pomoc