Problém s přihlášením. Localhost funguje, production ne
- frenkiesoul
- Člen | 11
Ahojte,
mám problém s přihlašováním podle quickstartu. Vše jsem udělal tak
jak jsem měl.
Na localhostu pak vše funguje jak má, ale po uploadu na produkční
server(wedos) se přihlašování nepovede.
Proces se zasekne na podmínce, která je umístěna ve startupu v presenterech(kromě Base a Sign):
if (!$this->getUser()->isLoggedIn()) {
$this->redirect('Sign:in');
}
Pokud zadám špatné heslo/už. jméno, tak proces neprojde a vyhodí se hláška o špatných credentials. Ale pokud zadám správné hodnoty, form se odešle, neprojde podmínkou a vrátí se zpět na SignPresenter. Už opravdu nevím co s tím :(.
Děkuji.
- frenkiesoul
- Člen | 11
Díky za odpověď. Smazat cache už jsem zkoušel, stejně tak jako cookies v browseru. Trápí mě hlavně to, že localhost jede naprosto v pořádku, takže mi asi uniká něco zřejmýho :/
- n.u.r.v.
- Člen | 485
Mě něco podobného dělá IE 10 na localhostu – když vložím špatné přihlašovací údaje, tak mi to ukáže chybu, takže komunikace s DBS a kontrola údajů funguje, ale jakmile vložím správné údaje, hodímě to zpět na přihlašovací formulář bez jakékoliv hlášky…
V Opeře, Firefoxu i Chrome to funguje bez problémů… Cache nette i IE jsem zkoušel vymazat – nepomohlo…
- frenkiesoul
- Člen | 11
Budu jen rád když někomu pomůžu.
Server mi hlásil chyby v sessions(nevšiml jsem si toho), podle toho co
hlásil jsem vytvořil v rootu složku „session“. Tím se problém
vyřešil.
Abych to po sobě uklidil, nastavil jsem potom pomocí metody setSavePath ()
znovu cestu a vše už funguje jak má :).
- n.u.r.v.
- Člen | 485
Hmm, tak mě to nejde na localhostu v IE – ostatní prohlížeče fungují 100%.
Co se stane:
- zobrazí se formulář pro přihlášení – v debugbaru jsou zobrazeny 3 session (2 si dělá nette a jednu dělám já v basepresenteru pro uložení ip a dalších info) – takže se session vytvoří
- odešlu dobře vyplněný formulář
- hodí mě to znovu na přihlašovací formulář a v debugbaru jsou ty původní session a „ikona dveří a Sign:in signInForm-submit!“
To je vše. Ani se to nedostane na kontrolu hesla a username, protože když dám chybné údaje, tak se chyba nevypíše – jako by neproběhla metoda pro zpracování formuláře…
A tento problém potřebuji vyřešit, protože dle google anaytics používá 70% mých návštěvníků IE…
Editoval n.u.r.v. (3. 7. 2013 15:19)
- n.u.r.v.
- Člen | 485
Grelek: ééé – kam to mám vložit? Díky
enumag:
ne, takto vypadá signpresenter:
<?php
use Nette\Application\UI\Form;
use Nette\Application\UI;
use Kdyby\BootstrapFormRenderer\BootstrapRenderer;
/**
* Sign in presenter.
*/
class SignPresenter extends BasePresenter {
/**
* Sign-in form factory.
* @return Nette\Application\UI\Form
*/
private $logRepository;
private $firmaRepository;
private $log;
public function __construct(\Todo\LogRepository $log) {
$this->log = $log;
}
public function startup() {
parent::startup();
if ($this->getUser()->isLoggedIn()) {//pokud je uživatel přihlášen
$this->redirect('Homepage:default');
}
$this->logRepository = $this->context->logRepository;
$this->firmaRepository = $this->context->firmaRepository;
}
protected function createComponentSignInForm() {
$form = new Form();
$form->setRenderer(new BootstrapRenderer);
$form->addProtection();
$form->setMethod('POST');
$form->addText('email', 'E-mail:')
->setRequired('Zadejte prosím Váš e-mail!')
->setAttribute('name', 'username')
->addRule(Form::EMAIL, "Vložený e-mail je ve špatném formátu!");
$form->addPassword('password', 'Heslo:')
->setRequired('Vyplňte heslo')
->setAttribute('onkeyup', 'passwordStrength(this.value);')
->setAttribute('id', 'pass')
->setAttribute('name', 'password');
$form->addSubmit('send', 'Přihlásit!');
$form->onSuccess[] = $this->signInFormSubmitted;
return $form; // vykreslí formulář
}
public function signInFormSubmitted(Form $form) {
try {
$user = $this->getUser();
$values = $form->getValues();
$user->login($values->email, $values->password);
$user->setExpiration('+ 10 minutes', TRUE);
$this->flashMessage('Přihlášení bylo úspěšné.', 'success');
$firma = $this->firmaRepository->get_firma($user->getIdentity()->CF);
$uzivatel = $this->getSession('uzivatel');
$uzivatel->firma_nazev = $firma->NAZEV;
$uzivatel->firma_adresa = $firma->ADRESA;
$uzivatel->firma_obec = $firma->OBEC;
$uzivatel->firma_ICO = $firma->ICO;
$uzivatel->firma_DIC = $firma->DIC;
$uzivatel->ip_adresa = $this->context->httpRequest->getRemoteAddress(); //ulozeni ip adresy do session
$uzivatel->browser = $this->context->httpRequest->getHeader('user-agent');
$this->log->zapis_log("1", $user->getIdentity()->CF, "0");
$this->redirect('Homepage:');
} catch (Nette\Security\AuthenticationException $e) {
$form->addError($e->getMessage());
}
}
}
Editoval n.u.r.v. (3. 7. 2013 15:41)
- n.u.r.v.
- Člen | 485
Ok, zkusím…
ještě něco – schválně jsem zkusil dát pryč „use Kdyby\BootstrapFormRenderer\BootstrapRenderer;“ a pak se mi po odeslání formuláře zobrazilo anglicky jako že mám odeslat formulář znovu, protože token neplatí. Když jsem dal pryč i „addProtection()“, tak se to vypisovalo taky…
EDIT: header nepomohl
Editoval n.u.r.v. (3. 7. 2013 15:54)
- martin.knor
- Člen | 17
Měl jsem stejný problém – řešení je v tom že IE nedokáže překousnout když má v názvu domény (nebo subdomény) podtržítko (_). Prostě nedokáže uložit cookies. Takže stačí z URL odebrat tento znak a mělo by to jet.