Autentizace v Nette 3.0 – jak na to?
- admin@easyweb4u.cz
- Backer | 143
Ahoj, chci přejít z Nette 2.4 na Nette 3.0. Začal jsem budovat web tak nějak od začátku a peru se s autentizací do administrace.
<?php
namespace App\Admin\Presenters;
use Nette;
use Nette\Application\UI\Form;
class SignPresenter extends AdminPresenter
{
private $passwords;
public function __construct(Nette\Database\Context $database, Nette\Security\Passwords $passwords)
{
$this->passwords = $passwords;
$this->database = $database;
}
protected function createComponentSignInForm()
{
$form = new Form;
$form->addProtection();
$form->addText('username', 'Uživatelské jméno:')
->setRequired('Prosím vyplňte své uživatelské jméno.');
$form->addPassword('password', 'Heslo:')
->setRequired('Prosím vyplňte své heslo.');
$form->addSubmit('send', 'Přihlásit');
$form->onSuccess[] = [$this, 'signInFormSucceeded'];
return $form;
}
public function signInFormSucceeded($form, $values)
{
$row = $this->database->table('users')->where('username = ?', $values->username)->fetch();
if (!$row) {
// throw new Nette\Security\AuthenticationException('User not found.');
$this->flashMessage('Uživatelské jméno není správné!');
} else if (!$this->passwords->verify($values->password, $row->password)) {
//throw new Nette\Security\AuthenticationException('Invalid password.');
$this->flashMessage('Heslo není správné!');
} else {
return new Nette\Security\Identity($row->id, $row->role, ['username' => $row->username]);
$this->redirect('Account:default');
}
}
public function actionOut()
{
$this->getUser()->logout();
}
}
?>
Ne a ne se potvora zalogovat. Kde dělám chybu? Předem díky.
Editoval admin@easyweb4u.cz (9. 1. 2020 14:38)
- David Matějka
- Moderator | 6445
returnuti te identity nic neudela, musis ji predat do
usera $this->user->login($identity)
- admin@easyweb4u.cz
- Backer | 143
David Matějka napsal(a):
returnuti te identity nic neudela, musis ji predat do usera
$this->user->login($identity)
Pro stejné lamy jako jsem já
$this->user->login(new Nette\Security\Identity($row->id, $row->role, [‚username‘ ⇒ $row->username]));
Škoda, že to není v dokumentaci, odkud jsem čerpal. Díky Davide, můj anděli
- Petr64
- Člen | 22
admin@easyweb4u.cz napsal(a):
David Matějka napsal(a):
returnuti te identity nic neudela, musis ji predat do usera
$this->user->login($identity)
Pro stejné lamy jako jsem já
$this->user->login(new Nette\Security\Identity($row->id, $row->role, [‚username‘ ⇒ $row->username]));
Škoda, že to není v dokumentaci, odkud jsem čerpal. Díky Davide, můj anděli
Taky jsem to v dokumentaci nenašel.
- Honza Kuchař
- Člen | 1662
@Petr64 Prosím o doplnění, kde jsi to v dokumentaci hledal, ať to tam můžeme doplnit. Díky!