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
+
0
-

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
+
0
-

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)