NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
jAk3r
Člen
Avatar
jAk3r:2.4.2017 21:09

Čau kluci,
Mám takový dost zvláštní problém mám vytvořený formulář pro přihlašování ale z nějakého nesmyslného důvodu posílá data do url a tím pádem se nic nestane…

/rs-nette/prihlaseni/?flashMessage=1&username=admin&password=aaaaaa&_submit=Přihlásit&_do=loginForm-submit

Nevíte někdo čím by to mohlo být způsobené?

A také když se pokusím prozkoumat prvek tak v form mám jako → **<form novalidate="">
**
Předem všem děkuji za rady.

S pozdravem
jAk3r

Odpovědět
2.4.2017 21:09
Pokud něčeho chceš dosáhnout, musíš si za tím jít.
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na jAk3r
vajkuba1234:2.4.2017 21:30

Pripoj svuj kod, aby bylo zrejme, co delas...

Nahoru Odpovědět
2.4.2017 21:30
No hope, no future, JUST WAR!
Avatar
jAk3r
Člen
Avatar
jAk3r:2.4.2017 22:37

LoginPresenter.php

<?php
namespace App\CoreModule\Presenters;

use App\Forms\UserForms;
use Nette\Application\UI\Form;
use Nette\Utils\ArrayHash;
use Nette\Security\AuthenticationException;

final class LoginPresenter extends BaseCorePresenter
{

    /** @var UserForms @inject */
    private $userFormsFactory;

    /** @var array Společné instrukce pro přihlašovací a registrační formuláře. */
    private $instructions;

    /** @persistent */
    public $flashMessage;

    /**
     * Konstruktor s injektovanou továrničkou na uživatelské formuláře.
     * @param UserForms $userForms automaticky injektovaná třída továrničky na uživatelské formuláře
     */
    public function __construct(UserForms $userForms)
    {
        parent::__construct();
        $this->userFormsFactory = $userForms;

    }


    /** Volá se před každou akcí presenteru a inicializuje společné proměnné. */
    public function startup()
    {
        parent::startup();
        $this->setLayout('layoutLogin');
        $this->instructions = [
            'message' => null,
            'redirection' => ':Core:Administration:'
        ];
    }

    /**
     * Vrací komponentu přihlašovacího formuláře z továrničky.
     * @return Form
     */
    protected function createComponentLoginForm()
    {
        $this->instructions['message'] = 'Byl jste úspěšně přihlášen.';
        return $this->userFormsFactory->createLoginForm(ArrayHash::from($this->instructions));
    }

    /*
    protected function createComponentLoginForm()
    {
        //$this->instructions['message'] = 'Byl jste úspěšně přihlášen.';
        //$instructions = ArrayHash::from($this->instructions);

        $form = new Form;
        $form->addText('username', '')
                ->setAttribute('class', 'form-control')
                ->setAttribute('placeholder', 'Email address')
                ->setRequired('Zadejte username');
        $form->addPassword('password', '')
                ->setAttribute('class', 'form-control')
                ->setAttribute('placeholder', 'Password')
                ->setRequired('Zadejte password');
        $form->addSubmit('submit', 'Přihlásit')
                ->setAttribute('class', 'btn btn-default');

        $form->onSuccess[] = [$this, 'onLoginFormSuccess'];
        return $form;
    }

    public function onLoginFormSuccess(Form $form)
    {
        //$presenter = $this; // Získej presenter ve kterém je formulář umístěn.
        //$this->redirect(':Core:Login:default');
        $this->redirect(':Core:Login:default', []);
        try {
            $values = $form->getValues();
            // Extrakce hodnot z formuláře.
            $username = $values->username;
            $password = $values->password;
            //dump($username);

            // Zkusíme zaregistrovat nového uživatele.
            //if ($register) $this->user->getAuthenticator()->register($username, $password);
            $this->user->login($username, $password); // Zkusíme se přihlásit.

            // Pokud instrukce obsahují zprávu, tak ji pošli do příslušného presenteru.
            $this->flashMessage('Byl jste úspěšně přihlášen.');
            //$this->restoreRequest($this->backlink);
            //$this->redirect(':Core:Administration:');
        } catch (AuthenticationException $ex) { // Registrace nebo přihlášení selhali.
            $this->flashMessage('Něco se porouchalo');
        }
    }*/
}

UserForms.php

<?php
namespace App\Forms;

use Nette\Application\UI\Form;
use Nette\Object;
use Nette\Security\AuthenticationException;
use Nette\Security\User;
use Nette\Utils\ArrayHash;

/**
 * Class UserFormsFactory
 * @package App\Forms
 */
class UserForms extends Object
{
        /** @var User Uživatel. */
        private $user;

        /**
         * Konstruktor s injektovanou třidou uživatele.
         * @param User $user automaticky injektovaná třída uživatele
         */
        public function __construct(User $user)
        {
                $this->user = $user;
        }

        /**
         * Přihlašuje a případně registruje uživatele.
         * @param Form $form                   formulář, ze kterého se metoda volá
         * @param null|ArrayHash $instructions uživatelské instrukce
         * @param bool $register               registruj nového uživatele
         */
        private function login($form, $instructions, $register = false)
        {
                $presenter = $form->getPresenter(); // Získej presenter ve kterém je formulář umístěn.
                try {
                    $values = $form->getValues();
                        // Extrakce hodnot z formuláře.
                        $username = $values->username;
                        $password = $values->password;

                        // Zkusíme zaregistrovat nového uživatele.
                        if ($register) $this->user->getAuthenticator()->register($username, $password);
                        $this->user->login($username, $password); // Zkusíme se přihlásit.

                        // Pokud jsou zadány uživatelské instrukce a formulář je umístěn v presenteru.
                        if ($instructions && $presenter) {
                                // Pokud instrukce obsahují zprávu, tak ji pošli do příslušného presenteru.
                                if (isset($instructions->message)) $presenter->flashMessage($instructions->message);

                                // Pokud instrukce obsahují přesměrování, tak ho proveď na příslušném presenteru.
                                if (isset($instructions->redirection)) $presenter->redirect($instructions->redirection);
                        }
                } catch (AuthenticationException $ex) { // Registrace nebo přihlášení selhali.
                        if ($presenter) { // Pokud je formulář v presenteru.
                                $presenter->flashMessage($ex->getMessage()); // Pošli chybovou zprávu tam.
                                $presenter->redirect('this'); // Proveď přesměrování.
                        } else { // Jinak přidej chybovou zprávu alespoň do samotného formuláře.
                                $form->addError($ex->getMessage());
                        }
                }
        }

        /**
         * Vrací formulář se společným základem.
         * @param null|Form $form formulář, který se má rozšířit o společné prky, nebo null, pokud se má vytvořit nový formulář
         * @return Form formulář se společným základem
         */
        private function createBasicForm(Form $form = null)
        {
                $form = $form ? $form : new Form;
                $form->addText('username', '')->setAttribute('class', 'form-control')->setAttribute('placeholder', 'Email address')->setRequired();
                $form->addPassword('password', '')->setAttribute('class', 'form-control')->setAttribute('placeholder', 'Password');
                return $form;
        }

        /**
         * Vrací komponentu formuláře s přihlašovacími prvky a zpracování přihlašování podle uživatelských instrukcí.
         * @param null|Form $form              komponenta formuláře, která se má rozšířit o přihlašovací prvky, nebo null, pokud se má vytvořit nový formulář
         * @param null|ArrayHash $instructions uživatelské instrukce pro zpracování registrace
         * @return Form komponenta formuláře s přihlašovacími prky
         */
        public function createLoginForm($instructions = null, Form $form = null)
        {
                $form = $this->createBasicForm($form);
                $form->addSubmit('submit', 'Přihlásit')->setAttribute('class', 'btn btn-default');
                $form->onSuccess[] = function (Form $form) use ($instructions) {
                    $this->login($form, $instructions);
                };
                return $form;
        }

        /**
         * Vrací komponentu formuláře s registračními prvky a zpracování registrace podle uživatelských instrukcí.
         * @param null|Form $form              komponenta formuláře, která se má rozšířit o registrační prvky, nebo null, pokud se má vytvořit nový formulář
         * @param null|ArrayHash $instructions uživatelské instrukce pro zpracování registrace
         * @return Form komponenta formuláře s registračními prky
         */
        public function createRegisterForm($instructions = null, Form $form = null)
        {
                $form = $this->createBasicForm($form);
                $form->addPassword('password_repeat', 'Heslo znovu')
                        ->addRule(Form::EQUAL, 'Hesla nesouhlasí.', $form['password']);
                $form->addText('y', 'Zadejte aktuální rok (antispam)')->setType('number')->setRequired()
                        ->addRule(Form::EQUAL, 'Špatně vyplněný antispam.', date("Y"));
                $form->addSubmit('register', 'Registrovat');
                $form->onSuccess[] = function (Form $form) use ($instructions) {
                        $this->login($form, $instructions, true);
                };
                return $form;
        }
}
Nahoru Odpovědět
2.4.2017 22:37
Pokud něčeho chceš dosáhnout, musíš si za tím jít.
Avatar
jAk3r
Člen
Avatar
jAk3r:3.4.2017 12:34

Vřešeno!!!

Chyba byla že v @login.lette nebyla definována metoda ve které se má zpracovat form.

Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
3.4.2017 12:34
Pokud něčeho chceš dosáhnout, musíš si za tím jít.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.