Autentizace v Nette 3.0 – jak na to?

admin@easyweb4u.cz
Backer | 143
+
0
-

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

returnuti te identity nic neudela, musis ji predat do usera $this->user->login($identity)

admin@easyweb4u.cz
Backer | 143
+
+2
-

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

CZechBoY
Člen | 3608
+
0
-

vsak je to v dokumentaci
https://doc.nette.org/…thentication#…

Petr64
Člen | 22
+
0
-

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

@Petr64 Prosím o doplnění, kde jsi to v dokumentaci hledal, ať to tam můžeme doplnit. Díky!