Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v 1.7 - forceRedirect #47

Closed
mira-kovar opened this issue Dec 6, 2019 · 10 comments
Closed

v 1.7 - forceRedirect #47

mira-kovar opened this issue Dec 6, 2019 · 10 comments
Labels

Comments

@mira-kovar
Copy link

Ahoj, odebrání forceRedirect bych považoval za brake change. Když, když server pošle v response redirect: "http://samesite/xxx" tak naja vytvoří request na redirectovanou stárnku, ale nepošle hlavičku x-requested-with: XMLHttpRequest, takže server místo json (snippetů) pošle HTML. Nejde o chybu?

@jiripudil
Copy link
Member

jiripudil commented Dec 6, 2019

Ahoj, obávám se, že nerozumím, kde je problém.

Předně: forceRedirect rozhodně není odebraný, odebraná je pouze podpora pro čtení tohoto nastavení z payloadu odpovědi, a to i tak až v nadcházející verzi 2.0; verze 1.7 sice emituje warning do konzole, když na klíč forceRedirect v odpovědi narazí, ale pořád k němu přihlíží.

Pokud je přesměrování lokální a není vynucený tvrdý redirect, Naja "přesměruje" stejným mechanismem, jakým odesílá všechny ostatní ajaxové požadavky, tedy včetně patřičných hlaviček. Nemyslím si, že by se mohlo stát, že by jeden request poslala správně, a jiný už ne.

Ta cílová stránka, na kterou přesměrováváš, počítá s tím, že může být zavolaná ajaxem? Tedy presenter invaliduje snippety, pokud isAjax()?

(Ale samozřejmě je možné, že tam chyba je. Bylo by skvělé, pokud by se ti podařilo připravit a někam nahrát nějaký minimální kód, na kterém je to reprodukovatelné.)

@mira-kovar
Copy link
Author

Ahoj,
chybně jsem uvedl forceRedirect a přitom jsem myslel redirect. Samozřejmě, že Presenter poslouchá na ajax a odpovídá snippety.

Do přílohy posílám screenshoty 1.6.0 a verze 1.7.0. Kde jde vidět, že v 1.7.0 při json respone {"redirect": "https://samedomain/xxx"} další request není obohacen o hlavičku x-requested-with: XMLHttpRequest. Pokud to nepomůže, tak přes vánoce zkusím udělat ukázkovou instalaci nette a někde to zveřejním.

Jako jednoduchá oprava, byl downgrade na verzi 1.6.0.

verze 1.6.0 - funguje

1 6 0

verze 1.7.0 - nefunguje

1 7 0

@jiripudil jiripudil added the bug label Dec 9, 2019
@jiripudil
Copy link
Member

Ha, vida, tak tam asi bude někde bug, i když zatím netuším jaký. Moc díky za report! Zkusím si to v nějaké volné chvíli zreprodukovat sám, stejně jsem chtěl kvůli 2.0 udělat nějaký sandbox, kde budu moct vyzkoušet, že fakt všechno funguje.

@jiripudil
Copy link
Member

Zkusím si to v nějaké volné chvíli zreprodukovat sám

Tak se obávám, že se nezadařilo 😕 mohl bych tedy @mira-kovar poprosit o nějaký minimální kousek kódu, na kterém to půjde zreprodukovat? Případně se můžeš pokusit "rozbít" ten můj

@jiripudil
Copy link
Member

Issue leží ladem, zavírám. Pokud to ještě bude aktuální, směle ho znovu otevři.

@mira-kovar
Copy link
Author

Už jsem došel na to proč to nefungovalo. Problém byl v tom, že jsem nepoužil $this->payload->postGet = TRUE;

Mimochodem, trápí mě jedna dopředná kompatibilita a to$payload->forceRedirect Proč to chceš v verzi 2.0 úplně vyřadit?

Přijde mi super, Například košík. Smazání jedné položky košíku jde udělat s invalidací snippetu, ale funkce vyprázdni košík je jednodušší zavolat s forceRedirectem. Zde bych nepochodil s data-naja-force-redirect nad .ajax elementem, protože je to jeden formulář s vícero handlers.

@jiripudil
Copy link
Member

Už jsem došel na to proč to nefungovalo.

👍

Proč to chceš v verzi 2.0 úplně vyřadit?

K tomu už jsem se vyjadřoval, zásadní věta je: "Server by měl klientu říct, co po něm chce, ale už mu nediktovat, jak to má udělat – to ať je v režii klienta," a to si myslím pořád.

Zde bych nepochodil s data-naja-force-redirect nad .ajax elementem, protože je to jeden formulář s vícero handlers.

To, který element je při odeslání formuláře autoritativní (formulář vs tlačítko), je jedna z věcí, které bych chtěl taky ještě zrevidovat a dopsat pár testů, takže za to teď nemůžu dát ruku do ohně, ale myslím si, že by mělo být možné dát ten data-atribut na odesílací tlačítko, pak se aplikuje jen pro odeslání formuláře daným tlačítkem.

@mira-kovar
Copy link
Author

mira-kovar commented Mar 18, 2020

Už jsem došel na to proč to nefungovalo.

👍

Proč to chceš v verzi 2.0 úplně vyřadit?

K tomu už jsem se vyjadřoval, zásadní věta je: "Server by měl klientu říct, co po něm chce, ale už mu nediktovat, jak to má udělat – to ať je v režii klienta," a to si myslím pořád.

Zde bych nepochodil s data-naja-force-redirect nad .ajax elementem, protože je to jeden formulář s vícero handlers.

To, který element je při odeslání formuláře autoritativní (formulář vs tlačítko), je jedna z věcí, které bych chtěl taky ještě zrevidovat a dopsat pár testů, takže za to teď nemůžu dát ruku do ohně, ale myslím si, že by mělo být možné dát ten data-atribut na odesílací tlačítko, pak se aplikuje jen pro odeslání formuláře daným tlačítkem.

Dík za odkaz který jsi psal dříve mě. 👍 Stihl jsem to úspěšně zapomenout. Zkus si ještě představit variantu kdy máš ten formulář v modálním okně. Okno má formulář ten má jediné tlačítko. V případě neúspěchu hláška uživatel nenalezen po (ajax requestu - modal zůstává otevřen) v případě, že uživatel je přihášen (forceRedirect) a celé UI se tím pádem obnoví (modal se zavře).

Bylo by fajn, kdyby ta funkcionalita šla v 2.0 vrátit pomocí pluginu/extension?

@jiripudil
Copy link
Member

Pokud při neúspěchu server neposílá redirect, nic se v takovém případě neděje, takže bych tomu formuláři prostě zapnul data-naja-force-redirect.

Jinak pokud obejdeš standardní chování (tj. nepošleš ze serveru přímo redirect, ale pošleš si potřebné informace v payloadu), můžeš si nad tím napsat vlastní obslužnou extension.

@mira-kovar
Copy link
Author

mira-kovar commented Mar 18, 2020

Ok. považuj to za vyřízené. Děkuji za odpovědi. zkusím ty forceRedirecty přepsat.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants