Nezobrazuje se identita uživatele po přihlášení

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Hlava23
Člen | 2
+
0
-

Zdravím, prosím o radu.
Nejsem schopen zobrazit uživatelské jméno po úspěšném přihlášení přes MyAuthenticator.php.
$user->getIdentity()->getId() hodí chybu: ‚Call to a member function getId() on null‘. Když umažu ->getId() vypíše: ‚Prihlášen uživatel: ', ale bez Id. Stejná situace, když dám $user->id. V případě $user->getIdentity()->username dostanu chybu: 'Trying to get property of non-object‘.

homepage\default.latte:

<?php
	if ($user->isLoggedIn()) {
		echo 'Prihlášen uživatel: ' . $user->getIdentity()->getId();
	} else {
		echo 'Uživatel není přihlášen';
	}
?>

MyAuthenticator.php:

<?php

	namespace App\Model;

	use Nette\Security as NS;
	use Nette\Security\Passwords;

	class MyAuthenticator extends \Nette\Object implements NS\IAuthenticator {
    public $database;
	function __construct(\Nette\Database\Context $database) {
        $this->database = $database;
    }

    function authenticate(array $credentials)
    {
        list($username, $password) = $credentials;
        $row = $this->database->table('users')
            ->where('username', $username)->fetch();

        if (!$row) {
            throw new NS\AuthenticationException('User not found.');
        }

        if (!NS\Passwords::verify($password, $row->user_password)) {
            throw new NS\AuthenticationException('Invalid password.');
        }
    }
}
?>

HomepagePresenter.php:

<?php
namespace App\Presenters;

use Nette;
use App\Model\ArticleManager;
use Nette\Application\UI\Form;
use Nette\Security\Identity;

class HomepagePresenter extends BasePresenter {
	public function signInFormSucceeded($form, $values) {
	    try {
	        $this->getUser()->login($values->username, $values->user_password);
	    } catch (\Nette\Security\AuthenticationException $e) {
	        $form->addError('Nesprávné přihlašovací jméno nebo heslo.');
	    }
	}
}
?>

Jsem zoufalej, několik hodin se snažím vyřešit takovou blbost a bez výsledku.

David Grudl
Nette Core | 8082
+
+3
-

Protože v metodě authenticate() žádnou nevracíš, podívej se do příkladu v Sandboxu.

Pavel Kravčík
Člen | 1180
+
+1
-

Neměla by authentice() funkce vracet něco podobného?

return new Nette\Security\Identity($yourIdentityWithID);
Hlava23
Člen | 2
+
0
-

Už to šlape. Díky za rychlou pomoc!