Úprava erroru [AuthenticationException() x flashMessage()]
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- lopikol
- Začátečník | 75
Používám tento modul:
https://doc.nette.org/…thentication
Poradili by ste mi prosím, jak vyměnit
throw new AuthenticationException()
za
flashMessage()
?
Pokud vyskočí error, tak se to ted vkládá do <form>
. To
nepotřebuji, jelikož mi to ho to pak celý rozhodí.
U flashMessage()
si mohu určit místo, kde se bude danný error
zobrazovat.
Authenticator.php
<?php
namespace AclProj\Security;
use Nette\Object,
Nette\Environment,
Nette\Security\Identity,
Nette\Security\IAuthenticator,
Nette\Security\AuthenticationException,
Model\User;
class Authenticator extends Object implements IAuthenticator
{
public function authenticate(array $credentials)
{
$email = $credentials[self::USERNAME];
$row = User::findByEmail($email);
if (!$row) {
throw new AuthenticationException("Užívateľ s registračným emailom '$email' sa nenašiel!", self::IDENTITY_NOT_FOUND);
}
$config = Environment::getConfig('security');
$password = sha1($credentials[self::PASSWORD] . $config->salt);
if ($row->password !== $password) {
throw new AuthenticationException('Zadali ste nesprávne heslo!', self::INVALID_CREDENTIAL);
}
$identity = new Identity($row->id, $row->role);
$identity->name = $row->name;
$identity->email = $row->email;
return $identity;
}
}
?>
Editoval lopikol (11. 2. 2011 17:33)
- lopikol
- Začátečník | 75
<?php
namespace AdminModule\Forms;
use Nette\Application\AppForm;
use Nette\Forms\Form;
use Nette\Environment;
use Nette\Security\AuthenticationException;
class LoginForm extends AppForm
{
public function __construct($parent, $name)
{
parent::__construct($parent, $name);
$this->addProtection('Prosím odošlite prihlasovacie údaje znova (vypršala platnosť bezpečnostného tokenu).');
$this->addText('login', 'Email:')
->addRule(Form::FILLED, 'Prosím zadajte registračný email.')
->addRule(Form::EMAIL, 'Zadaný login nie je platná emailová adresa');
$this->addPassword('password', 'Password:')
->addRule(Form::FILLED, 'Prosím zadajte heslo.');
$this->addSubmit('send', 'Log in!');
$this->onSubmit[] = array($this, 'formSubmited');
}
public function formSubmited($form)
{
try {
$user = $this->getPresenter()->getUser();
$user->login($form['login']->value, $form['password']->value);
$this->getPresenter()->getApplication()->restoreRequest($this->getPresenter()->backlink);
$this->getPresenter()->redirect('Homepage:Default');
}
catch (AuthenticationException $e) {
$this->flashMessage($e->getMessage(), 'error'); //Zde jsem $form->addError() vyměnil za $this->flashMessage()
}
}
}
?>