Jak zachytit vyjímku v nette
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- microcz
- Člen | 62
Ahoj, chtěl bych při neúspěšném pokusu o přihlášení odchytit vyjímku a přesměrovat uživatele na vlastní chybovou stránku. Problém je že vyjímka mi do mého catch bloku nedoputuje a zobrazí se standardní nette červené okno s vyjímkou. Poradíte?
class UserManager extends Nette\Object implements Security\IAuthenticator {
/** @var \DibiConnection @inject */
public $db;
/**
* Performs an authentication.
* @return Nette\Security\Identity
* @throws Nette\Security\AuthenticationException
*/
public function authenticate(array $credentials) {
// Retrieve username and password
list($login, $password) = $credentials;
// Select user with given login from database
$user = (new Dao\ApplicationUser())->setDb($this->db)->loadByLogin($login);
if (!$user->isPopulated()) {
$msg = 'The username is incorrect.';
$arg = self::IDENTITY_NOT_FOUND;
throw new Nette\Security\AuthenticationException($msg, $arg);
}
// Check user password
if (!$this->checkPassword($user, $password)) {
$msg = 'The password is incorrect.';
$arg = self::INVALID_CREDENTIAL;
throw new Nette\Security\AuthenticationException($msg, $arg);
}
// Check active
if (!$user->isActive()) {
$msg = 'User account is not active.';
$arg = self::NOT_APPROVED;
throw new Nette\Security\AuthenticationException($msg, $arg);
}
// Check verification
if (!$user->isVerified()) {
$msg = 'User is not verified.';
$arg = self::NOT_APPROVED;
throw new Nette\Security\AuthenticationException($msg, $arg);
}
// Update last login
if (!$user->updateLastLogin($this->getUserIp())) {
$msg = 'Cannot update user IP.';
$arg = self::FAILURE;
throw new Nette\Security\AuthenticationException($msg, $arg);
}
// Create identity
return new Nette\Security\Identity($user->getId(), $user->getRoleid());
}
kód v presenteru
public function signInFormSubmitted(UI\Form $form) {
$vals = $form->getValues();
try {
$this->getUser()->login($vals['login_login'], $vals['login_password']);
} catch (Exception $e) {
// Sem to nedoputuje
$this->redirect('MyErrorPresenter:');
}
$this->flashMessage('Byl jsi úspěšně přihlášen.');
$this->redirect('Homepage:');
}