vypsani {plink ..} v throw new AuthenticationException
- dj-kubis
- Člen | 3
Zdravim…
resim problem ktery nemohu nikde najit jak vyresit…
mam u loginu pres funkci nize… a mam problem s tim ze potrebuji vypsat odkaz v throw new AuthenticationException hledal jsem vsude mozne ale nenasel jsem zpusob jak to vyresit
/**
* Performs an authentication against e.g. database.
* and returns IIdentity on success or throws AuthenticationException
* @param array $credentials
* @return Identity
* @throws AuthenticationException
* @throws \GuzzleHttp\Exception\GuzzleException
*/
function authenticate(array $credentials)
{
/* ... */
if (!$res->data) {
$latte = new Engine();
$latte->setLoader(new \Latte\Loaders\StringLoader);
$test = '{plink Checkout:passwordreset}';
//$test = $this->application->getPresenter()->link('//Presenter:default', $params);
$link = $latte->renderToString(
'<a href="{$test}" >klikněte ZDE</a>',
array(
'test' => $test
)
);
//$link = $this->link('Checkout:passwordreset');
throw new AuthenticationException("Omlouváme se, ale kombinace emailu a hesla nesouhlasí. Prosím zkuste to znovu, nebo $link pro resetování hesla..");
/* ... */
}
- David Matějka
- Moderator | 6445
ahoj, vyjimky nesloužejí k ukládání zpráv pro uživatele. koukni, jak je to řešené v sandboxu. v Authenticatoru jen vyvoláš výjimku a u formuláře ji chytneš a nastavíš error message
v té error message pak můžeš použít Nette\Utils\Html pro
sestavení HTML s odkazem. v komponentě také můžeš už přes
$this->presenter->link(...)
odkaz vytvořit
- dj-kubis
- Člen | 3
Ahoj Davide…
Zkousel jsem to dle toho cos psal… a mam to takto
Formular hanler je takto
/**
* @param Form $form
* @param ArrayHash $values
*/
public function handleFormSuccess(Form $form, ArrayHash $values): void
{
try{
$this->presenter->user->login($values->login, $values->password);
$this->onSuccess($values->activationCode);
} catch (Nette\Security\AuthenticationException $e) {
if ($e instanceof AbortException) {
$this->onSuccess($values->activationCode);
$form->addError(
"Omlouváme se, ale kombinace emailu a hesla nesouhlasí. Prosím zkuste to znovu, nebo <a href=\"#\" >klikněte ZDE</a> pro resetování hesla.."
);
}
$this->redrawControl('submitErrorSnippet');
$this->onError();
return;
}
onSuccess();
}
a ten autentizacni script mam
/**
* Performs an authentication against e.g. database.
* and returns IIdentity on success or throws AuthenticationException
* @param array $credentials
* @return Identity
* @throws AuthenticationException
* @throws \GuzzleHttp\Exception\GuzzleException
*/
function authenticate(array $credentials)
{
$data = [
"data" => [
"login" => $credentials[0],
"password" => $credentials[1]
]
];
$response = $this->apiClient->postUserLogin($data);
$res = json_decode($response->getBody());
if (!$res->data) {
throw new AuthenticationException(
'Invalid login credentials',
self::INVALID_CREDENTIAL
);
}
return new Identity(
$res->data->user_id, $res->data->role_id, [
"is_email_activated" => $res->data->is_email_activated,
"is_phone_activated" => $res->data->is_phone_activated,
"firstname" => $res->data->firstname,
"surname" => $res->data->surname,
"email" => $res->data->email,
"phone" => $res->data->phone,
]
);
}
a stale se mi ta vyjimka neodchytava a vyhazuje mi error 500 nez aby mi to poslalo do prohlizece tu chybovou hlasku
David Matějka napsal(a):
ahoj, vyjimky nesloužejí k ukládání zpráv pro uživatele. koukni, jak je to řešené v sandboxu. v Authenticatoru jen vyvoláš výjimku a u formuláře ji chytneš a nastavíš error message
v té error message pak můžeš použít Nette\Utils\Html pro sestavení HTML s odkazem. v komponentě také můžeš už přes
$this->presenter->link(...)
odkaz vytvořit
- David Matějka
- Moderator | 6445
máš v importech use Nette
? pokud ne, tak ti ten catch s
Nette\Security\AuthenticationException
nebude chytat tuto vyjimku,
ale něco
jako App\Muj\Namespace\Nette\Security\AuthenticationException
- dj-kubis
- Člen | 3
David Matějka napsal(a):
máš v importech
use Nette
? pokud ne, tak ti ten catch sNette\Security\AuthenticationException
nebude chytat tuto vyjimku, ale něco jakoApp\Muj\Namespace\Nette\Security\AuthenticationException
Ano to pomohlo nakonec chybelo uz jen to use nette …
dekuji