Nefunguje předání credentials z LoginFormu do Authenticatoru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Džízis Crust
Člen | 10
+
0
-

Zdravím :)

Potřeboval bych pomoct najít chybu v tomto gitu

Snažil jsem se dát dohromady modelloader a staticke acl.. není to sice hotové (neobsahuje autorizaci) ale autentizace by měla fungovat i samostatně.. nebo ne? :D

Notice laděnky:
Undefined offset: 1 na řádku 27

25:        public function authenticate(array $credentials) {
26:
27:        list($email,$password) = $credentials;

řádek 85 arguments – $credentials – array(0)

81:        public function login($username = NULL, $password = NULL)
82:        {
83:            $this->logout(TRUE);
84:            $credentials = func_get_args();
85:            $this->setIdentity($this->context->authenticator->authenticate($credentials));
86:            $this->setAuthenticated(TRUE);
87:            $this->onLoggedIn($this);
88:        }

Předem :Díky

JuniorJR
Člen | 181
+
0
-

Podívej se, kde voláš login metodu a ujisti se, že ji předáváš právě dva parametry. V presenteru:

try {
    $this->user->login('niceEmail', 'nicePassword');
    $this->redirect('Foo:bar');
} catch (Nette\Security\AuthenticationException $e) {
    $this->flashMessage('Login failed, reason: ' . $e->getMessage());
}

Editoval JuniorJR (22. 11. 2011 19:35)

Džízis Crust
Člen | 10
+
0
-

JuniorJR: Login volám ve forms/SignInForm.php v metodě onSignInFormSubmitted ale mám to snad dobře :) V presenteru na to pak mám továrničku.. zabalil jsem to tedy do try, ale problém stále stejný..

JuniorJR
Člen | 181
+
0
-

@Džízis Crust: Dumpni si hodnoty formuláře před loginem a pak zkus to samé pro $credentials. Vypadá to, že se ti tam nepředávají…

Debugger::dump($form->getValues());

Editoval JuniorJR (22. 11. 2011 19:41)

Džízis Crust
Člen | 10
+
0
-

JuniorJR: Teď mi došlo, že když jsem se ptal na chatu, tak mi Vrtak, nebo HosipLan psal, že volám backlink jako metodu, tak jsem to opravil z backlink() na backlink. A ještě psal něco o ukládání requestu akorát tomu moc nerozumím.. nebo přesněji nevím jak to případně zkontrolovat, nebo opravit..

Džízis Crust
Člen | 10
+
0
-

Možná jsem to zmršil tím, že mám login v jiným modulu.. nebo tak něco.. někde jsem něco neupravil, nebo zapomněl napsat jinam / jinak.. ale hlava mi to už nebere a to že jsem zkoušel všechny možný řešení co mě napadly neznamená, že jsem je zkoušel správně.. takže fakt nevím čeho se chytit..

JuniorJR
Člen | 181
+
0
-

@Džízis Crust: Tak už vidím tu tvoji chybu. Oprav si v StartPresenteru v metodě startup() první podmínku:

public function startup()
{
    parent::startup();

    $user = $this->user;

    // Tady si měl původně $user->login() a volal si tak metodu login,
    // což byl logický nesmysl.
    // Musíš místo toho kontrolovat, zda je uživatel přihlášený,
    // a to proto, že uživatele přihlašuješ pouze po odeslání signInFormulare.
    if(!$user->isLoggedIn()) {
        ...
    } else {
        ...
    }
}

Editoval JuniorJR (22. 11. 2011 20:38)

Džízis Crust
Člen | 10
+
0
-

Jj, už vím :) Zrovna jsem se ztrapňoval na chatu.. s tím, že při zadání špatného hesla to záhadně funguje, tak jsem začal pátrat i jinde :D Každopádně díky za ochotu.. :) A někdo by to tu mohl smazat.. :D

JuniorJR
Člen | 181
+
0
-

@Džízis Crust: Jasný :) Příště stačí lépe prostudovat laděnku…

Džízis Crust
Člen | 10
+
0
-

JuniorJR: Máš pravdu :) Ještě jsem si to vrátil a koukám do ní.. před tím jsem se díval jen na authenticate a na http\user a řekl si, že se mi tam asi nepředávaj data z formuláře.. protože koho by napadlo, že nějakej ňouma napíše kód, kde se po úspěšný autentizaci volá znova přihlašování :D