vypsani {plink ..} v throw new AuthenticationException

dj-kubis
Člen | 3
+
0
-

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
+
+3
-

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
+
0
-

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
+
0
-

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
+
0
-

David Matějka napsal(a):

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

Ano to pomohlo nakonec chybelo uz jen to use nette …
dekuji