Uživatel – přihlášení pomocí dočasného hesla
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- tatyalien
- Člen | 239
Dobrý den,
chtěl bych se zeptat, přihlašování i odhlašování uživatelů mě
funguje. Dodělával jsem si jen do komponenty možnost přihlásit se pomocí
dočasného hesla. Zde jsem ale narazil, jak uživatele mám přihlásit,
protože
$user->login($values->username, $values->password);
používá metodu authenticate, kterou mám napsanou. Přepsal jsem si to tedy
podle dat, co volá user->login, je to takto v pořádku, nebo je tam někde
nějaká bota? Přihlášení mě takto funguje.
use Nette\Security as NS;
...
public function prihlaseniLostFormSubmitted(Form $form)
{
try {
$user = $this->presenter->getUser();
$values = $form->getValues();
$row = $this->model->getUsers()->where('username', $values->username)->fetch();
if (!$row) {
throw new NS\AuthenticationException("Uživatel '".$values->username."' nenalezen.");
}
$authenticator = $this->presenter->getService('authenticator');
if ($row->jednorazoveHeslo !== $authenticator->calculateHash($values->password)) {
throw new NS\AuthenticationException("Špatně zadané dočasné heslo.");
}
unset($row->password, $row->jednorazoveHeslo, $row->jednorazoveHesloDatum);
$identity = new NS\Identity($row->id, $row->role, $row->toArray());
$user->getStorage()->setIdentity($identity);
$user->getStorage()->setAuthenticated(TRUE);
$this->flashMessage('Přihlášení bylo úspěšné.', 'success');
// přesměrování na změnu hesla
$this->presenter->redirect('Shop:userChangePasswordLost');
} catch (IOException $e) {
$form->addError($e->getMessage());
} catch (SmtpException $e) {
$form->addError($e->getMessage());
} catch (NS\AuthenticationException $e) {
$form->addError($e->getMessage());
}
}
Editoval tatyalien (23. 8. 2012 10:29)
- tatyalien
- Člen | 239
Promiň, ale off-topic to fakt není, zajímá mě, jestli se identita co se používá v nette nastavila dobře.
viz:
$identity = new NS\Identity($row->id, $row->role, $row->toArray());
$user->getStorage()->setIdentity($identity);
$user->getStorage()->setAuthenticated(TRUE);
Nebo jestli se má ještě něco zavolat.
Editoval tatyalien (23. 8. 2012 10:58)