Sessions, cookie-k és hitelesítés, codenamecrud - ingyenes webfejlesztő képzés

A „ülés” azon a tényen alapul, hogy az állam a felhasználó valamilyen módon tartósított, ha mozog az egyik oldalról a másikra. Emlékezzünk vissza, hogy a HTTP nem menti az állam úgy, hogy csak a böngésző vagy az alkalmazás „emlékszik”, amit meg kell emlékezni.

Ebben a leckében megtudhatja az ülések, a cookie-k és a böngésző hogyan hitelesítés be van építve Rails. Megnézzük, hogyan hitelesítés, hozzon létre saját kezébe, és a leggyakrabban használt, hogy hitelesítse a gem - terveznie.

Elgondolkodtató

Próbálja megválaszolni a kérdéseket feltéve. Miután a feladat, próbálja megválaszolni őket újra

A cookie-k, Sessions, és a flash

A cookie-k, Sessions, és a flash - három különleges tárgy, amely megadja 4 Rails, és hogy viselkednek hasonlóan hash-eket. Hozzá vannak szokva, hogy tárolja az adatokat a kérelmek között. Az adatok tárolhatók, amíg a következő kérést, amíg a böngésző bezárásakor, vagy amíg a lejárati néhány előre meghatározott ideig. Amellett, hogy a tárolási idő, a különbség ezek a tárgyak, hogy mindegyiknek megvan a maga sajátos alkalmazási területe, ami lesz rasskazno tovább.

A cookie-k - a „kulcs-érték” párokat, hogy milyen típusú adatok tárolása a felhasználó böngészőjének lejártáig egy bizonyos ideig. Ezek alkalmazható szinte bármilyen feladat, de a leggyakrabban használják őket, hogy a felhasználó ugyanazon a helyen egy weboldalt, ha veszít internetkapcsolat vagy tárolni egyszerű beállításokkal kijelző a helyszínen. Azt is tárolja a felhasználó kosár adatokat vagy jelszavakat, de ez nem egy jó ötlet, mi nem kell tárolni a hagyományos cookie információkat kell védeni vagy menteni a böngésző ülés. A felhasználó könnyen elvesznek az adatok, a gyorsítótár ürítése, vagy lopni / felhasználásának védtelen adatokat a cookie jar.

Együttműködik a cookie-kat Rails hozzáférést biztosít egy speciális hash úgynevezett cookie-kat. ahol minden egyes kulcs-érték pár van tárolva egy külön cookie-t a felhasználó böngészője. Ha például megőrizte a cookie-kat [: haj-color] = „szőke”. akkor nyissa meg a fejlesztői eszközök a böngésző, és látni a felhasználó cookie kulccsal haj színét és értékét szőke. Törölje azokat is használja cookies.delete (: haj-szín).

Minden új kérést a szerver, a böngésző elküldi az összes cookie-kat, és elérheti őket a vezérlő és a nézetek (views), mint egy közönséges hash. Azt is látni az érvényességi idő, például az alábbi szintaxis használatával a cookie-kat [: name] = .

Egy speciális eset - ez az, amikor szeretné nyomon követni a felhasználó „session”, amely magában foglalja mindent a felhasználó nem, amíg meg nem akarja, hogy „memorizálni”, általában akkor, amíg a felhasználó bezárja a böngésző ablakot. Ebben az esetben minden oldal, amelyet a felhasználó felkeresett, mielőtt a böngésző bezárása része lesz ugyanabban a munkamenetben.

Annak érdekében, hogy a felhasználó azonosítására ülésén, a Rails tárolja a felhasználó böngészőjének egy különleges biztonságban és védve a cookie-változások, mely tartalmazza a teljes ülés hash (a „források” című részben, akkor keresse a fejlesztői eszközök a böngésző), és ez már nem működik, ha a böngésző bezárásakor. Amikor a felhasználó kérelmet a kérelem, a kérelmet automatikusan magában session cookie (mint a többi cookie-k), és akkor tudja használni, hogy nyomon követheti, hogy a felhasználó be van jelentkezve. Ez mind most tűnhet elvont, de nagyon hamar látni fogja, hogy ez hogyan működik a gyakorlatban.

Rails hozzáférést biztosít a hash-t a „munkamenet” nagyjából ugyanúgy, mint a hash cookie ". Használja a munkamenet változót a beadványok vagy vezérlők, valahogy így:

  • és a cookie-k nem valós hash a síneket egyszerűen úgy tesz, mintha ez, hogy könnyebb velük dolgozni. Azonban, akkor olvasd el a hash mert nagyon hasonlóan viselkedett igazi hash.
  • Az adatok mennyisége tárolható a hash session cookie-k vagy a böngésző korlátozott (

4 kilobyte). Ez elég minden „normális” célokra, de ne próbálja helyettesíteni az adatbázisban tárolóból.

Már látható és használható a vaku hash, de majd nézd meg újra, most a megértése a pozíciók ülés. Flash - egy speciális hash (Nos, valójában egy módszert, amely úgy viselkedik, mint egy hash), amely tárolja az adatokat csak egy kérés, hogy a következő. El lehet képzelni, mint egy munkamenet hash, amely megsemmisíti önmagát megnyitása után. Ez általában használt üzeneteket küldeni a kontroller a nézetet, hogy a felhasználó láthatja üzeneteket a sikeres űrlapküldés (vagy a formában sikerült elküldeni).

Ha azt szeretnénk, hogy megjelenik a „Köszönjük, hogy feliratkozott!” a felhasználó böngészőjének, akció után indított #create (ami jellemzően olyan redirect_to küld a felhasználó egy teljesen új oldalt siker esetén), akkor ezt az üzenetet a sikeres előfizetést? Nem tudja használni a helyi változó (például a változó), mert ez nem okoz átirányítja a böngészőt, hogy adjon egy teljesen új HTTP kérést, és minden változót elvesznek.

Itt a támogatást a flash! Használd, hogy mentse a flash-[: siker] (nevezhetjük, amit akarsz), és ezek az adatok elérhetők lesznek a bemutató, amíg a következő kérést. Miután a prezentáció megnyílik hash, a Rails törli adatok, vagyis ők nem fognak megjelenni, amikor a felhasználó mozgatja egy új oldalt. Ez nagyon okos és kényelmes.

Azonban meg kell regisztrálni a kijelző vaku üzeneteket látható. Általában írott rövid segítő, amely megjeleníti a rendelkezésre álló azonnali üzenet (-iya) tetején a böngésző ablakot. Azt is hozzá egy üzenet osztálya, amely növeli utáni bármely CSS-stílusok, mint például kiemelni: a siker üzeneteket zöld és: hiba - piros.

szűrők vezérlők

Mielőtt elkezd beszélni hitelesítést, akkor rasssmotret vezérlők szűrőket. Ezek lényege, szűrők, hogy elindítunk egy kód egy adott ideig, mint a többi előtt kód működni fog. Ez azért fontos, mert például ha a felhasználó szeretné futtatni az intézkedés, amelyre nem volt jogi, meg kell, hogy csírájában ezt a bajt kérelmet, és adja vissza a megfelelő hiba / átirányítás, mielőtt a felhasználó vállalja, bármely más cselekmény. Egyszerűen fogalmazva, ha „kiszűrni” helytelen kéréseket.

Tesszük ezt egy olyan szűrő alkalmazásával „előtte”, amely úgy érvként a neve a módszer, hogy szeretnénk futtatni:

before_action metódus egy szimbólum a módszernek, hogy végrehajtásra kerül, mielőtt bármilyen más kódot a vezérlő. Ha false vagy nil. kérés nem hajtható végre.

Meg lehet rendelni egy szűrő speciális intézkedés segítségével lehetőséget, akkor lenne csak. mint ez: before_action: require_login csak: [szerkesztés. frissítés]. Vagy fordítva, ha használja a lehetőséget: kivéve. Keresés működik minden akciójátékokat megadottól eltérő.

Sokkal jobb, hogy elrejtse a szűrési módszerek a „magán”, úgy, hogy azok csak annak vezérlő.

És végül, a szűrőket lehet örökletes, ezért ha azt szeretnénk, hogy szűrőt alkalmaz a lövész teljesen minden vezérlők, tegyük app / vezérlők / application_controller.rb fájlt.

hitelesítés

A fő célja a hitelesítés -, hogy győződjön meg arról, hogy bárki, aki megkísérli a kereset, támogatható. A szokásos módon kezelni ezt a folyamatot, hogy a felhasználó bejelentkezik keresztül a bejelentkezési űrlapot. Miután a felhasználó bejelentkezett, akkor is nyomon azt követő intézkedések segítségével az ülések, amíg ki nem jön.

Basic és Digest Authentication

Ha szükség van egy egyszerű és biztonságos hitelesítési módszer, akkor a HTTP Basic hitelesítést. Mi nem foglalkozunk vele részletesebben itt, de általában azt jelenti, hogy adjon meg egy felhasználói nevet és jelszót egy egyszerű űrlapot és küldje el (titkosítatlan) a hálózaton keresztül. Erre a célra #http_basic_authenticate_with módszer (például lásd további források), és ugyanazt a módszert, amelyek a meghatározott szabályozó hitelesített felhasználók számára.

Egy kicsit biztonságosabb (HTTP-n keresztül) hitelesítési rendszer segítségével HTTP Digest hitelesítést. Ismét nem vagyunk itt, hogy fesse meg részletesen. Ez alapján megkezdődik az eljárás révén #before_action és távolsági hívás #authenticate_or_request_with_http_digest. amely úgy a blokk, hogy visszatérjen az „igaz” jelszót kell megadni.

A probléma ezekkel a módszerekkel szemben, hogy a felhasználói nevek és jelszavak kifejezetten a vezérlő (vagy máshol), így lehet csak ideiglenes megoldás.

Készítse el a hitelesítési

Ha azt szeretnénk, hogy a felhasználók jelentkezzen be az oldalra kell végeznie néhány intézkedéseket. Nem fogjuk festeni őket részletesen, mert meg tudod csinálni mindezt a gyakorlatban. Azonban néhány elvek hasznos tudni. Mi azt mondjuk jövő, úgy tűnhet, egy kicsit zavaró és zavart a valós példákat, de ez valójában csak egy rövid leírást azokat a darabokat, akkor hamarosan ágyazva a projekt.

Először is, nem tárolja a jelszavakat az adatbázisban formájában szöveget. Ezzel mi csak bajt (lefogadom is olvasni a híreket a feltört oldalak és jelszavak kiszivárgott?). Ehelyett tárolunk titkosított változata a jelszót ( „jelszó kivonatot”).

Amikor a felhasználó belép a jelszót a bejelentkezési űrlap, ahelyett, hogy hasonlítsa össze a szöveget a jelszó közvetlenül, akkor titkosítja a jelszót. Akkor össze a szaggatott változat a jelszót a kivonatolt jelszót az adatbázisban tárolt. Ha egyezik, akkor a bejelentkezett felhasználó.

Ez sokkal jobb, mert ha emlékszel, mi beszéltünk a biztonsági leckét webfejlesztés 101 hash - egyirányú függvény. Könnyedén kivonatolt jelszót szöveget, de nagyon, nagyon nehéz megfejteni vissza, és visszaállítani az eredeti jelszót. A leghatékonyabb módja annak, hogy megtörjék a sor hash - ez gyűjteni egy hatalmas lista a lehetséges jelszavak hash, és hasonlítsa össze azokkal, akik megpróbálják feltörni (azaz, ez egy hatalmas választéka jelszavak).

Sínek nem kényszeríti, hogy ezt az egészet magad. Ön rendelkezik módszerrel úgynevezett #has_secure_password. Ön egyszerű bővítmény felhasználói modell, és hozzáteszi, számos funkció, hogy szükség van. A munka ezzel a kényelmes módszerrel nastraivate a Felhasználói attribútumok feldolgozási modell jelszót és password_confirmation. de nem menteni ezeket az értékeket egy adatbázisban. has_secure_password eljárás kölcsönhatásban értékeiket, alakítja át őket egy hash.

Inicializálni egy új felhasználói munkamenet (amikor bejelentkezik), akkor létre kell hozni egy új kontroller (rendszerint sessions_controller.rb), és automatikusan a megfelelő: új. hozzon létre, és: elpusztítani. Ha a felhasználó rendelkezik a megfelelő felhasználói név és jelszó (és megnézzük ezt a módszert használva #authenticate), menteni a felhasználói azonosítót a változó ülésén. amelyeket fel lehet használni, hogy erősítse meg, hogy a felhasználó valóban az, aki bemutatkozott. Ez egy egyszerű módja annak, hogy a felhasználó azonosítására, aki használja a meglévő infrastruktúra Sínek ülés, de a tárolt adatokat csak addig, amíg van egy ülés.

Ha a felhasználó akarja, hogy az ő „emlékszik” (amit valószínűleg látta ezerszer checkbox „Emlékezz rám” a helyszínen tétel formájában), szüksége van egy módja annak, hogy emlékezzen, hogy hosszabb ideig, mint az időtartam a böngésző munkamenetet. Meg kell, hogy hozzon létre egy másik oszlopban a Felhasználók asztal, ahol ez lesz tárolva, hogy egy titkosított remember_token (összes nevezhetjük, amit akarsz). Majd használni, hogy ne véletlenszerűen sor, hogy a felhasználó, amely ezután felhasználható azonosítani.

Általában hasznos, ha több módszer helper megoldására a közös feladatok: A belépéshez a felhasználónak, hogy lássa, van jelentkezve, vagy összehasonlítani a bejelentkezett felhasználó egy másik felhasználó (ez jól jön, ha az aktuális felhasználó nézi az oldalt egy másik felhasználó, és nem látni erre a „szerkesztés”) . Ezek a dolgok teszik könnyebbé az életedet, mert akkor újra használni őket a vezérlők szűrők Vyuha vagy akár a saját vizsgálatok.

Általános lépés leírása:

  1. Felhasználók hozzáadása a tábla oszlop, amely tartalmazni fogja a felhasználói password_digest.
  2. Amikor egy felhasználó regisztrál, kivonatolt jelszót, és mentse a kivonatolt változata az új adatbázis-oszlopba has_secure_password módszerrel. Felhasználó hozzá a modell.
  3. Ne felejtsük el, hogy szükség van, hogy érvényesítse a jelszó hossza és erősítse meg a jelszót.
  4. Készítsen egy munkamenetet egy vezérlő (és a megfelelő útvonalak) és használja #authenticate módszert. a felhasználó bejelentkezési után lépett be a helyes adatokat a nevezési lapon.
  5. Felhasználók memorizálni létre remember_token oszlopot a felhasználók asztal és megtartották ezt a jelzőt, mint egy állandó cookie-t a felhasználó böngészője. Visszaállítható ez minden új bejárat a helyszínen.
  6. Minden alkalommal, amikor betölt egy oldalt, amely hitelesítést (és használja #before_action a megfelelő vezérlő) első ellenőrzést süti remember_token össze az adatbázis, hogy ha a felhasználó be van jelentkezve. Ha nem, akkor átirányítja őt a bejelentkezési oldalra.
  7. Ha szükséges, hozzon létre egy segítő módszer, amely lehetővé teszi, hogy nem egyszerű dolog, mint meghatározni, hogy a felhasználó be van jelentkezve, vagy összehasonlítani az aktuális felhasználó a másikra.
  8. Profit.

Dolgozzon ki - ez egy gyöngyszem, amely azért jött létre, hogy érted az összes fenti. Érdemes azonnal elkezdenek tanulmányait, de ez nem jó ötlet a kezdők számára. Eleinte rendkívül fontos, hogy megértsék az alapvető szempontjait hitelesítést. Dolgozzon is nagyon nehéz, ha befut problémái, amelyek nem szabványos megoldásokat. Általánosságban elmondható, hogy több hasznos gyöngyszem Rails középszintű fejlesztők, mint a kezdők számára.

Ennek ellenére, a végén akkor használja a legtöbb saját projektek, létrehozása után a saját mester hitelesítést. Használja Devise összehasonlíthatatlanul jobb, mint építeni hitelesítést a saját kezét, mert megoldja a sok probléma, és bezárja a potenciális biztonsági réseket, amit nem lett volna is gondolt. Devise lehetővé teszi, hogy kölcsönhatásba lépnek a fejlettebb hitelesítési rendszerek, miközben dolgozik az API, mint például OAuth. Ezért később nagyon hasznos lesz az Ön számára.

Röviden kidolgozzák biztosít egy sor formák regisztráció és bejelentkezés a honlapon, valamint eljárásokat azok végrehajtására. Ez áll a 10 modul (és kiválaszthatja, hogy melyik lesz használva). Ön adja meg a gem „dolgozzon”, és futtassa a telepítőt, hogy mozog a fájlokat az alkalmazás. Akkor is meg kell futtatni az adatbázis migráció hozzá további mezőket az asztalhoz felhasználók.

a feladatokat

következtetés

Ez a lecke kell adni arról, hogy mennyire bonyolult lehet egy hitelesítési rendszer, de azt is el kellett távolítani a patina rejtély a helyszínek a mechanizmusok, amelyek akkor már százszor. Azonosítás - nem rakéta tudomány, ez sokkal könnyebb, és hamarosan te magad embed be a kérelmet.

további források

Ez a szakasz tartalmaz linkeket további anyagokat. Ez nem feltétlenül így tekintenek rájuk, mint valami hasznos, ha azt szeretné, hogy mélyebben a téma