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
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 | 8227
Protože v metodě authenticate() žádnou nevracíš, podívej se do příkladu v Sandboxu.
- Pavel Kravčík
- Člen | 1195
Neměla by authentice()
funkce vracet něco podobného?
return new Nette\Security\Identity($yourIdentityWithID);