<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.rettungsdienstblog.eu/index.php?action=history&amp;feed=atom&amp;title=JWT_bez_kontroln%C3%AD_logiky%3A_kde_tokeny_ti%C5%A1e_selh%C3%A1vaj%C3%AD</id>
	<title>JWT bez kontrolní logiky: kde tokeny tiše selhávají - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.rettungsdienstblog.eu/index.php?action=history&amp;feed=atom&amp;title=JWT_bez_kontroln%C3%AD_logiky%3A_kde_tokeny_ti%C5%A1e_selh%C3%A1vaj%C3%AD"/>
	<link rel="alternate" type="text/html" href="https://wiki.rettungsdienstblog.eu/index.php?title=JWT_bez_kontroln%C3%AD_logiky:_kde_tokeny_ti%C5%A1e_selh%C3%A1vaj%C3%AD&amp;action=history"/>
	<updated>2026-10-02T23:46:57Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Rettungsdienst-Wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.rettungsdienstblog.eu/index.php?title=JWT_bez_kontroln%C3%AD_logiky:_kde_tokeny_ti%C5%A1e_selh%C3%A1vaj%C3%AD&amp;diff=402902&amp;oldid=prev</id>
		<title>AnastasiaBenjami am 1. Oktober 2026 um 21:07 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.rettungsdienstblog.eu/index.php?title=JWT_bez_kontroln%C3%AD_logiky:_kde_tokeny_ti%C5%A1e_selh%C3%A1vaj%C3%AD&amp;diff=402902&amp;oldid=prev"/>
		<updated>2026-10-01T21:07:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 1. Oktober 2026, 21:07 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Prvním krokem je určit&lt;/del&gt;, kdo &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;je autorem &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kdo drží práva&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;U firemních projektů platí&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že práva zaměstnanců přecházejí na zaměstnavatele jen tehdy&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pokud je to smluvně ošetřeno&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;U externích spolupracovníků je nutné mít písemné přiřazení práv&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jinak nemáte oprávnění licence udělovat. Teprve poté má smysl řešit&lt;/del&gt;, kterou &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;licenci zvolit&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Prvním praktickým krokem je otestovat databázi na vlastním vzorku dat&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ne na cizím demu. Vezměte reprezentativní sadu záznamů – včetně okrajových případů&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jako jsou prázdné hodnoty, dlouhé texty, znaky s diakritikou nebo neobvyklá data. Nahrajte je do testovací instance &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zkuste spustit dotazy, které odpovídají reálnému provozu. Sledujte přitom chování při chybách: co &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;stane&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;když dotaz selže, když dojde místo na disku nebo když se přeruší spojení&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Právě &lt;/del&gt;v &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;těchto situacích se ukáže&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zda je podpora skutečná&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nebo jen formální&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Komenty piš tam&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kde vysvětlují proč&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ne co. // zvýšíme počítadlo nad i++ &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zbytečný&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;// API vrací data bez pole items&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;proto kontrola má smysl. Stejně tak se vyhni zakomentovanému kódu&lt;/del&gt;, který &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tam zůstal po experimentu&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Buď ho smaž&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nebo si ho nech &lt;/del&gt;v &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;historii změn&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;V editoru nemá co dělat&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Prvním krokem je zvolit si nástroj a nainstalovat si ho lokálně&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Většina vývojářů skončí u Gitu&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;protože je všude a funguje i bez připojení k síti. Po instalaci &lt;/del&gt;si &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nastavte &lt;/del&gt;jméno a e-mail, které se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;budou zapisovat &lt;/del&gt;do &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;historie&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pak si v kořeni projektu spusťte inicializaci repozitáře&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Tím vznikne skrytá složka&lt;/del&gt;, do &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;které nástroj ukládá všechny změny&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Tuhle složku nikdy needitujte ručně a nikdy ji nemažte&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pokud si nejste jistí&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;co děláte&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Základem &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ověřit podpis přesně tím algoritmem&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;který očekáváte&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nikdy nenechávejte knihovnu&lt;/del&gt;, aby &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;si algoritmus vybrala podle hlavičky alg &lt;/del&gt;z &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tokenu&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pokud aplikace podporuje HS256 i RS256&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;musíte dopředu rozhodnout&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;který použijete&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;a ostatní odmítnout&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Zvlášť nebezpečná je kombinace, kdy &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;veřejný klíč z RS256 dá podstrčit jako HMAC secret. Vždy porovnávejte iss&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;aud a exp; token bez expirace je &lt;/del&gt;jen &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;trvalý přístupový klíč &lt;/del&gt;v &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cizích rukou&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Co hlídat při vydávání a ukládání Access token držte krátký, v řádu minut&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Refresh token ukládejte jako serverovou relaci s možností odvolání&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ne jako další JWT bez stavu&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Do payloadu nepatří hesla&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;rodná čísla ani interní identifikátory&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;které nechcete ukázat. Pamatujte&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že payload &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jen base64, nikoli šifra&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pokud potřebujete skrýt obsah&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;použijte JWE&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nebo raději držte citlivá data na serveru a do tokenu dejte pouze odkaz&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Poslední věc, kterou &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;potřeba zařídit brzy&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;je záloha historie mimo váš počítač&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Lokální repozitář vás ochrání před vlastními chybami&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale ne &lt;/del&gt;před &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;selháním disku&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Přidejte si vzdálené úložiště a po každé dokončené práci tam změny odešlete. Tím získáte třetí vrstvu jistoty&lt;/del&gt;: &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;máte aktuální stav, máte historii a máte i kopii mimo stroj&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Až tohle budete dělat automaticky, přestanete řešit, co jste kde rozbili&lt;/del&gt;, a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;začnete řešit skutečnou práci&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Jakmile zvládnete ukládat změny, naučte se pracovat &lt;/del&gt;s &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;větvemi. Větev &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;oddělená linka vývoje&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;na které můžete zkoušet nové věci, aniž byste rozbili funkční verzi&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pro malé úpravy stačí jedna hlavní větev, &lt;/del&gt;pro &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;větší práci si vytvořte novou&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dokončete ji a pak ji sloučte zpět&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Při slučování může dojít ke konfliktu&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;když stejné místo upravily dvě větve. Není to katastrofa – otevřete soubor&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vyberte správnou variantu &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;uložte výsledek&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Druhá častá chyba je ukládat změny příliš pozdě a příliš mnoho najednou&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Jeden obří zápis s popisem „úpravy&amp;quot; vám při hledání chyby nepomůže. Ukládejte po menších kusech&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vždycky když dokončíte jednu logickou věc – opravu chyby&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;novou komponentu, úpravu stylů&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ke každému uložení napište krátkou zprávu&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;která říká, co se změnilo a proč&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Budete si za měsíc děkovat&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;až budete potřebovat zjistit&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kdy &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;něco pokazilo&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Co patří do historie a co ne Než uděláte první uložení stavu&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vytvořte soubor&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;který řekne nástroji&lt;/del&gt;, co má &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ignorovat&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Do něj patří složky s nainstalovanými závislostmi&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dočasné soubory&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;lokální konfigurace s hesly a cokoliv&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;co &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;generuje automaticky při buildu&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Typická &lt;/del&gt;chyba &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;začátečníka je&lt;/del&gt;, že &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tam tyhle věci nedá &lt;/del&gt;a pak &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;řeší konflikty v souborech&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;které nikdy neměl verzovat. Platí jednoduché pravidlo: do historie patří jen to, co jste napsali vy a co je potřeba ke spuštění projektu na jiném počítači&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Stavy&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;na &lt;/del&gt;které &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;se zapomíná Největší rozdíl mezi prototypem &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;použitelnou aplikací jsou stavové obrazy&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Vývojář často řeší jen ten šťastný případ: data dorazila&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vše se vykreslilo. Ale co prázdný seznam? Co načítání? Co chyba sítě? Co neplatný vstup? Každá z těchto situací potřebuje vlastní obrazovku nebo alespoň text. Prázdný stav nemá být bílá plocha&lt;/del&gt;, ale &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;krátká věta a výzva k akci&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Chybová hláška nemá být „Error 500&amp;quot;&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale co se pokazilo a co &lt;/del&gt;má &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;uživatel udělat dál&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Načítání delší než zlomek sekundy potřebuje indikaci, jinak uživatel klikne znovu&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nakonec konzistence. Formátování, středníky, uvozovky, pořadí importů – to vše by mělo být stejné v celém projektu. Nemá cenu dohadovat&lt;/ins&gt;, kdo &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;má pravdu; nastavte jeden nástroj na formátování &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nechte ho rozhodovat&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Kód, který se neformátuje ručně&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;se čte výrazně lépe a v recenzích se pak řeší logika&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ne mezery&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Čistý kód není otázka vkusu&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale disciplíny&lt;/ins&gt;, kterou &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;oceníte především ve chvíli, kdy do něj budete muset sáhnout po delší době&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Většina juniorních vývojářů posílá desítky životopisů do firem&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;které inzerují volnou pozici&lt;/ins&gt;, a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;diví &lt;/ins&gt;se, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že odpověď nepřijde&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Problém nebývá &lt;/ins&gt;v &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kvalitě kódu&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale ve způsobu&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jakým hledáte&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Rozdíl mezi soutěží o inzerát a hledáním přes lidi&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;které znáte&lt;/ins&gt;, je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zásadní&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Inzerát vidí stovky uchazečů&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;reference vidí jeden člověk&lt;/ins&gt;, který &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vás doporučí&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Začněte u sebe: napište si seznam všech&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kdo pracuje &lt;/ins&gt;v &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;technologiích — bývalí spolužáci, učitelé, účastníci meetupů, správci open-source projektů, kde jste přispěli&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Těm napište krátkou zprávu, ne „hledám práci&amp;quot;, ale konkrétní dotaz na jejich zkušenost&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Verzování začíná jediným příkazem, ale většina problémů vzniká ještě před ním&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Než poprvé spustíš git init&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nastav &lt;/ins&gt;si jméno a e-mail, které se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zapisují &lt;/ins&gt;do &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;každého commitu: git config --global user.name &amp;quot;Jan Novák&amp;quot; a git config --global user&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;email &amp;quot;jan@example.com&amp;quot;&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Bez toho Git odmítne commit vytvořit nebo použije nesmyslné údaje&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;které se pak těžko zpětně mění. Stejně důležité je rozhodnout, co &lt;/ins&gt;do &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;repozitáře nepatří — soubory s hesly, lokální konfigurace, build výstupy. Vytvoř soubor &lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;gitignore dřív&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;než uděláš první commit&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;protože dodatečné vyřazování už sledovaných souborů je otrava&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Druhá věc, která rozhoduje o všem ostatním, &lt;/ins&gt;je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pojmenování. Proměnná s názvem data nebo temp neříká nic a za týden ji budete dohledávat podle toho&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kde se používá&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pište názvy tak&lt;/ins&gt;, aby &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;věta „vypočítej celkovou cenu včetně daně&amp;quot; byla &lt;/ins&gt;z &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kódu čitelná bez komentáře&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;U funkcí používejte sloveso a předmět: spocitejCenu&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nactiUzivatele&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zvalidujEmail. U booleanů tvar otázky: jePrihlaseny&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;maOpravneni&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Vyhněte &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zkratkám&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kterým rozumíte &lt;/ins&gt;jen &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vy &lt;/ins&gt;v &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;den psaní&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Poslední praktická rada: začněte ještě před nástupem&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Projděte si repozitář firmy&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;přečtěte si dokumentaci a připravte si vývojové prostředí&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;První den se pak ptáte na věci&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;které se týkají práce&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ne na to&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kde &lt;/ins&gt;je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;káva&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Kariéra v IT není o tom&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kdo toho ví nejvíc&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale kdo vydrží být konzistentně užitečný&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Při ověřování si dejte pozor na časové posuny. Malá tolerance u exp a nbf &lt;/ins&gt;je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;v pořádku&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale nesmí být v minutách&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Stejně tak kontrolujte&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že token nebyl použit &lt;/ins&gt;před &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nbf&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Odvolávání je slabina bezstavových tokenů&lt;/ins&gt;: &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;blacklist podle jti nebo krátká platnost s rotací refresh tokenů řeší většinu případů&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nikdy neposílejte token v URL&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dostane se do logů &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;refererů&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Typická chyba je ukládání tokenu do localStorage a následné XSS. HttpOnly cookie &lt;/ins&gt;s &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;SameSite &lt;/ins&gt;je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;bezpečnější&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale vyžaduje ochranu proti CSRF&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Další častá chyba je zapomenutý aud při více službách: token vydaný &lt;/ins&gt;pro &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jednu API projde i do druhé. Testujte negativní scénáře&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ne jen šťastnou cestu&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Podepište token klíčem&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;který umíte rotovat&lt;/ins&gt;, a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;staré klíče nechte ověřovat jen po dobu platnosti vydaných tokenů&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Základní pravidlo zní: pokrytí měřte tam, kde může selhání způsobit reálnou škodu&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Platební logika&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;výpočty&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;validace vstupů nebo stavové automaty si vysoké pokrytí zaslouží&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Naopak jednoduché gettery&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;konfigurační konstanty nebo automaticky generovaný kód nemá smysl honit na sto procent&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pokud tým tráví čas psaním testů jen proto&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;aby v reportu svítilo vyšší číslo&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;přesunul &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;od kvality k vanity metrice&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pokrytí přestává být užitečné ve chvíli&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kdy se stane cílem místo nástrojem. Jakmile tým píše testy kvůli reportu&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;přestává řešit&lt;/ins&gt;, co má &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;být ověřeno. Stejně tak ztrácí smysl, když se jím poměřují lidé nebo když se porovnávají nesrovnatelné projekty&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Číslo bez kontextu neřekne nic o tom&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zda je software spolehlivější. Říká jen&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kolik řádků bylo spuštěno.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;JWT tokeny se nasazují jako univerzální řešení autentizace&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale bez správně nastavené validace &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;z nich stává jen podepsaný kus textu, kterému server slepě věří&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nejčastější &lt;/ins&gt;chyba &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;není v algoritmu, nýbrž v tom&lt;/ins&gt;, že &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;se token dekóduje a jeho obsah se použije bez ověření podpisu &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;všech povinných polí. Útočník &lt;/ins&gt;pak &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;může změnit sub nebo role a dostat se tam&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kam nemá&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Praktický postup je jednoduchý. Nejprve si určete&lt;/ins&gt;, které &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;části kódu jsou rizikové, &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pro ně nastavte smysluplný práh&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Potom sledujte&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zda nové změny pokrytí nesnižují – ne plošně&lt;/ins&gt;, ale &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;v dotčených modulech&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dále kontrolujte, zda testy skutečně selžou&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;když do kódu zavedete chybu. Teprve potom &lt;/ins&gt;má &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;číslo vypovídací hodnotu&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Bez tohoto ověření je pokrytí jen dekorace&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>AnastasiaBenjami</name></author>
	</entry>
	<entry>
		<id>https://wiki.rettungsdienstblog.eu/index.php?title=JWT_bez_kontroln%C3%AD_logiky:_kde_tokeny_ti%C5%A1e_selh%C3%A1vaj%C3%AD&amp;diff=400950&amp;oldid=prev</id>
		<title>Craig75N89845127: Die Seite wurde neu angelegt: „Prvním krokem je určit, kdo je autorem a kdo drží práva. U firemních projektů platí, že práva zaměstnanců přecházejí na zaměstnavatele jen tehdy, pokud je to smluvně ošetřeno. U externích spolupracovníků je nutné mít písemné přiřazení práv, jinak nemáte oprávnění licence udělovat. Teprve poté má smysl řešit, kterou licenci zvolit.&lt;br&gt;&lt;br&gt;Prvním praktickým krokem je otestovat databázi na vlastním vzorku dat, ne na…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.rettungsdienstblog.eu/index.php?title=JWT_bez_kontroln%C3%AD_logiky:_kde_tokeny_ti%C5%A1e_selh%C3%A1vaj%C3%AD&amp;diff=400950&amp;oldid=prev"/>
		<updated>2026-10-01T18:24:58Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „Prvním krokem je určit, kdo je autorem a kdo drží práva. U firemních projektů platí, že práva zaměstnanců přecházejí na zaměstnavatele jen tehdy, pokud je to smluvně ošetřeno. U externích spolupracovníků je nutné mít písemné přiřazení práv, jinak nemáte oprávnění licence udělovat. Teprve poté má smysl řešit, kterou licenci zvolit.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Prvním praktickým krokem je otestovat databázi na vlastním vzorku dat, ne na…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Prvním krokem je určit, kdo je autorem a kdo drží práva. U firemních projektů platí, že práva zaměstnanců přecházejí na zaměstnavatele jen tehdy, pokud je to smluvně ošetřeno. U externích spolupracovníků je nutné mít písemné přiřazení práv, jinak nemáte oprávnění licence udělovat. Teprve poté má smysl řešit, kterou licenci zvolit.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Prvním praktickým krokem je otestovat databázi na vlastním vzorku dat, ne na cizím demu. Vezměte reprezentativní sadu záznamů – včetně okrajových případů, jako jsou prázdné hodnoty, dlouhé texty, znaky s diakritikou nebo neobvyklá data. Nahrajte je do testovací instance a zkuste spustit dotazy, které odpovídají reálnému provozu. Sledujte přitom chování při chybách: co se stane, když dotaz selže, když dojde místo na disku nebo když se přeruší spojení. Právě v těchto situacích se ukáže, zda je podpora skutečná, nebo jen formální.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Komenty piš tam, kde vysvětlují proč, ne co. // zvýšíme počítadlo nad i++ je zbytečný. // API vrací data bez pole items, proto kontrola má smysl. Stejně tak se vyhni zakomentovanému kódu, který tam zůstal po experimentu. Buď ho smaž, nebo si ho nech v historii změn. V editoru nemá co dělat.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Prvním krokem je zvolit si nástroj a nainstalovat si ho lokálně. Většina vývojářů skončí u Gitu, protože je všude a funguje i bez připojení k síti. Po instalaci si nastavte jméno a e-mail, které se budou zapisovat do historie. Pak si v kořeni projektu spusťte inicializaci repozitáře. Tím vznikne skrytá složka, do které nástroj ukládá všechny změny. Tuhle složku nikdy needitujte ručně a nikdy ji nemažte, pokud si nejste jistí, co děláte.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Základem je ověřit podpis přesně tím algoritmem, který očekáváte. Nikdy nenechávejte knihovnu, aby si algoritmus vybrala podle hlavičky alg z tokenu. Pokud aplikace podporuje HS256 i RS256, musíte dopředu rozhodnout, který použijete, a ostatní odmítnout. Zvlášť nebezpečná je kombinace, kdy se veřejný klíč z RS256 dá podstrčit jako HMAC secret. Vždy porovnávejte iss, aud a exp; token bez expirace je jen trvalý přístupový klíč v cizích rukou.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Co hlídat při vydávání a ukládání Access token držte krátký, v řádu minut. Refresh token ukládejte jako serverovou relaci s možností odvolání, ne jako další JWT bez stavu. Do payloadu nepatří hesla, rodná čísla ani interní identifikátory, které nechcete ukázat. Pamatujte, že payload je jen base64, nikoli šifra. Pokud potřebujete skrýt obsah, použijte JWE, nebo raději držte citlivá data na serveru a do tokenu dejte pouze odkaz.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Poslední věc, kterou je potřeba zařídit brzy, je záloha historie mimo váš počítač. Lokální repozitář vás ochrání před vlastními chybami, ale ne před selháním disku. Přidejte si vzdálené úložiště a po každé dokončené práci tam změny odešlete. Tím získáte třetí vrstvu jistoty: máte aktuální stav, máte historii a máte i kopii mimo stroj. Až tohle budete dělat automaticky, přestanete řešit, co jste kde rozbili, a začnete řešit skutečnou práci.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Jakmile zvládnete ukládat změny, naučte se pracovat s větvemi. Větev je oddělená linka vývoje, na které můžete zkoušet nové věci, aniž byste rozbili funkční verzi. Pro malé úpravy stačí jedna hlavní větev, pro větší práci si vytvořte novou, dokončete ji a pak ji sloučte zpět. Při slučování může dojít ke konfliktu, když stejné místo upravily dvě větve. Není to katastrofa – otevřete soubor, vyberte správnou variantu a uložte výsledek.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Druhá častá chyba je ukládat změny příliš pozdě a příliš mnoho najednou. Jeden obří zápis s popisem „úpravy&amp;quot; vám při hledání chyby nepomůže. Ukládejte po menších kusech, vždycky když dokončíte jednu logickou věc – opravu chyby, novou komponentu, úpravu stylů. Ke každému uložení napište krátkou zprávu, která říká, co se změnilo a proč. Budete si za měsíc děkovat, až budete potřebovat zjistit, kdy se něco pokazilo.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Co patří do historie a co ne Než uděláte první uložení stavu, vytvořte soubor, který řekne nástroji, co má ignorovat. Do něj patří složky s nainstalovanými závislostmi, dočasné soubory, lokální konfigurace s hesly a cokoliv, co se generuje automaticky při buildu. Typická chyba začátečníka je, že tam tyhle věci nedá a pak řeší konflikty v souborech, které nikdy neměl verzovat. Platí jednoduché pravidlo: do historie patří jen to, co jste napsali vy a co je potřeba ke spuštění projektu na jiném počítači.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Stavy, na které se zapomíná Největší rozdíl mezi prototypem a použitelnou aplikací jsou stavové obrazy. Vývojář často řeší jen ten šťastný případ: data dorazila, vše se vykreslilo. Ale co prázdný seznam? Co načítání? Co chyba sítě? Co neplatný vstup? Každá z těchto situací potřebuje vlastní obrazovku nebo alespoň text. Prázdný stav nemá být bílá plocha, ale krátká věta a výzva k akci. Chybová hláška nemá být „Error 500&amp;quot;, ale co se pokazilo a co má uživatel udělat dál. Načítání delší než zlomek sekundy potřebuje indikaci, jinak uživatel klikne znovu.&lt;/div&gt;</summary>
		<author><name>Craig75N89845127</name></author>
	</entry>
</feed>