V CMS 1C-Bitrix jsou vývojářům představeny čtyři systémové komponenty pro implementaci funkcí autorizace, změnu hesla a registraci běžných uživatelů systému (system.auth. *). K těmto dokumentům však neexistuje žádná oficiální dokumentace. V tomto článku se naučíte omezení a nevýhody používání těchto komponent, proč byste je měli používat, jak je nejlépe používat, a možná vyvodíte nějaké závěry o tom, proč neexistuje žádná dokumentace.

Princip činnosti

Ve výchozím nastavení se pro autorizaci a registraci používají staré komponenty 1.0, jejichž použití je nežádoucí. Můžete to opravit zaškrtnutím políčka „Použít komponenty 2.0 k autorizaci a registraci“ v nastavení hlavního modulu nebo jednorázovým spuštěním kódu:
COption :: SetOptionString ("main", "auth_comp2", "Y");
Po kontrole popisu pořadí spuštění stránky vidíme, že v kroku 1.13 (ještě předtím, než se ze šablony webu zobrazí header.php) jsou zkontrolována přístupová práva úrovně 1 a pokud není předána, zobrazí se autorizační formulář. Podívejme se na to blíže.

Vyvolání registračního formuláře znamená následující akce:
- pořadí provádění stránky se bude nadále provádět beze změny až do bodu 3 „Tělo stránky“, včetně provádění header.php,
- místo "těla stránky", v závislosti na proměnných předaných $ _REQUEST, je připojena jedna ze systémových komponent system.auth. * (konkrétně system.auth.authorize, pokud je $ _REQUEST prázdný), ke kterému jsou předávány speciální parametry (více níže),
- pořadí provádění stránky se bude nadále provádět beze změny, včetně provádění souboru footer.php.
To vám umožní implementovat vlastní design (šablonu) pro komponentu system.auth.authorize, která se organicky vejde do šablony webu mezi záhlaví a zápatí.

Kontrola přístupových práv „úrovně 1“ iniciuje volání autorizačního formuláře v následujících případech:
- pokud je globální konstanta NEED_AUTH definována a rovná se true,
- pokud uživatel (včetně neregistrovaného uživatele) nemá dostatečná práva ke čtení souboru, který požadoval.

Práva ke čtení souborů a sekcí pro různé skupiny uživatelů se vytvářejí při jejich úpravách v administračním panelu v souboru service.access.php. Každý soubor popisuje úrovně přístupu k souborům a adresářům umístěným na stejné úrovni. Je možné vytvořit soubor .access.php pro každý adresář ve veřejné části webu, každý následující soubor doplňuje pravidla přístupu pro řetězec adresářů. Příklad takového souboru v kořenovém adresáři webu:

Takové rozdělení práv umožňuje doslova „na místě“ požadovat uživatelské jméno a heslo v případech, kdy jde bez aktivního povolení do adresáře, jehož funkčnost vyžaduje povolení. To se často stává, pokud si uživatel ponechá ve svých oblíbených odkaz na kořen webu, ale na konkrétní sekci, se kterou pracuje nejvíce. Výsledkem je, že uživatel zadá přihlašovací jméno a heslo, aniž by opustil vstupní stránku, je mu zasláno na jeho adresu URL, namísto stránky systémová komponenta zpracuje přijatá data nebo vyhodí chybu nebo autorizuje a znovu načte stránku. Uživatel je spokojen, nepotřebuje další kliknutí, aby se dostal do požadované sekce. Programátor je šťastný, nemusí přemýšlet o přesměrování na / auth / a $ backurl.

Globální konstantu NEED_AUTH doporučuji používat pouze v konkrétních případech, z nichž jednou je samotná autorizační stránka ve standardním dodání ukázkového webu na /auth/index.php:
SetTitle (GetMessage ("AUTH_TITLE")); ?\u003e

">


Tento skript přenáší řízení do jádra Bitrix, když předtím definoval konstantu NEED_AUTH. Bitrix, pokud uživatel nemá oprávnění, připojí záhlaví + systémovou komponentu (autorizaci) + zápatí a zemře, čímž zabrání provedení skriptu za druhým řádkem. Pokud má uživatel oprávnění, obdrží uvítací zprávu a odkaz na kořenový adresář webu.

Ostatní součásti systému

Dovolte mi, abych vám připomněl, že při zahájení autorizace bude komponenta system.auth.authorize připojena jádrem Bitrix namísto „těla stránky“ pouze v případě, že uživatel ze seznamu výslovně nepožádal jinou systémovou komponentu:
-? zabudnuté_heslo \u003d ano povolí system.auth.forgotpasswd (pošlete kontrolní slovo pro změnu hesla),
-? change_password \u003d yes povolí system.auth.changepasswd (změna hesla řídícím slovem),
-? register \u003d yes povolí system.auth.registration (registrace),
-? confirm_registration \u003d yes umožní system.auth.confirmation (potvrzení registrace).
Tento přístup umožňuje uživateli obnovit heslo nebo dokonce zaregistrovat účet, aniž by opustil vstupní stránku. S dostupnou sadou těchto odkazů můžete manipulovat ve svých šablonách systémových komponent, ale nemůžete zabránit tomu, aby byly volány, když budete postupovat podle těchto odkazů, což je velké minus.

Pomocí autorizační komponenty uvnitř těla stránky

Někdy je třeba vložit autorizační formulář nikoli do těla stránky, ale do těla stránky, například na /about/index.php uprostřed obsahu. A pak je tu odstín: ukázalo se, že systémová součást system.auth.authorize nedělá ve vztahu k přímé autorizaci absolutně nic, a proto sama o výsledku autorizace neví nic. Pokud tedy připojíme komponentu bez parametrů, bude správně autorizovat uživatele, ale nebude zobrazovat autorizační chyby. Ve skutečnosti se autorizační mechanismus odehrává někde hluboko v hlubinách jádra, poté jádro připojí komponentu předáním parametru AUTH_RESULT a nastavením hodnoty z $ APPLICATION-\u003e arAuthResult, kterou musíme na našich stránkách opakovat:
SetTitle („O webu“); ?\u003e ...IsAuthorized ()):?\u003eIncludeComponent ("bitrix: system.auth.authorize", "", array ("AUTH_RESULT" \u003d\u003e $ APPLICATION-\u003e arAuthResult)); ?\u003e ...
Pokud během provádění komponenty vyvstane potřeba autorizace, měli byste zavolat autorizační formulář pomocí metody CMain :: AuthForm (), která uživateli umožní nejen přihlášení bez opuštění vstupní stránky, ale také uloží všechny parametry do adresy URL:
$ APPLICATION-\u003e AuthForm (array ("MESSAGE" \u003d\u003e "Pro práci s ... je vyžadována autorizace.", "TYPE" \u003d\u003e "OK",));

Vytváření vlastních šablon

Chcete-li přizpůsobit vzhled systémových formulářů pro autorizaci, registraci, žádost o změnu hesla a změnu hesla pomocí ovládacího řádku, měli byste zkopírovat stávající šablony těchto komponent (/bitrix/components/bitrix/system.auth.*/templates/.default) do šablony web (/ bitrix / templates /<шаблон_сайта>/components/bitrix/system.auth.*/.default) a poté s nimi pracovat. V těchto formulářích nemůžete změnit názvy přenášených polí, ale můžete k registraci přidat jakákoli další pole, například „telefon“, i když v této fázi systémová součást nebude s těmito novými poli rozumět tomu, co od ní chcete. Můžete také zcela změnit design a upravit zobrazení odkazů na sousední součásti systému. Při přepracování těchto šablon věnujte pozornost výstupu zpráv globální funkcí ShowMessage, která jako vstup přebírá řetězec nebo pole. Můžete se ho zbavit, ale je lepší přepsat šablonu komponenty system.show_message.

Rozšíření registrační funkce

Bohužel jsou dnes systémové komponenty implementovány v procedurálním stylu, který neumožňuje zdědit od nich vlastní komponenty, přepsat a doplnit funkčnost, takže k řešení těchto problémů je třeba použít události Bitrix. Dvě nejzajímavější události generované registrací uživatele jsou OnBeforeUserRegister a OnAfterUserAdd. V ideálním případě se obslužné rutiny pro tyto události zaregistrují při instalaci modulu, odeberou se při odebrání modulu, například:
// při instalaci modulu: RegisterModuleDependences ("main", "OnAfterUserAdd", $ this-\u003e MODULE_ID, "CWBroker", "OnAfterUserAdd"); RegisterModuleDependences ("main", "OnBeforeUserRegister", $ this-\u003e MODULE_ID, "CWBroker", "OnBeforeUserRegister"); // při odebírání modulu: UnRegisterModuleDependences ("main", "OnAfterUserAdd", $ this-\u003e MODULE_ID, "CWBroker", "OnAfterUserAdd"); UnRegisterModuleDependences ("main", "OnBeforeUserRegister", $ this-\u003e MODULE_ID, "CWBroker", "OnBeforeUserRegister");
Událost OnBeforeUserRegister je pozoruhodná tím, že není volána, když je obvykle přidán uživatel, ať už se jedná o volání API, nebo o ruční přidání v administrativní části, což umožňuje změnit logiku registrace hostujícího uživatele uložením dalších omezení na pole nebo zpracováním dalších polí, například kontrolou čísel v telefonu , kontrola nad přítomností údajů v jménu a příjmení.
třída CWBroker (// ... veřejná statická funkce OnBeforeUserRegister (& $ arArgs) (globální $ APPLICATION; $ _REQUEST ["USER_PERSONAL_PHONE"] \u003d preg_replace ("# [^ 0-9] #", "", $ _REQUEST [" USER_PERSONAL_PHONE "]); $ arArgs [" LOGIN "] \u003d $ arArgs [" EMAIL "]; $ arArgs [" CONFIRM_PASSWORD "] \u003d $ arArgs [" HESLO "]; $ arArgs [" PERSONAL_PHONE "] \u003d $ _REQUERSAL_PHONE "]; $ arArgs [" PERSONAL_STATE "] \u003d $ _REQUEST [" USER_PERSONAL_STATE "]; if (prázdný ($ arArgs [" NAME "])) ($ APPLICATION-\u003e ThrowException (" název není zadán "); vrátit false;) if (prázdný ($ arArgs ["LAST_NAME"])) ($ APPLICATION-\u003e ThrowException ("příjmení není uvedeno"); vrátit false;) if (prázdný ($ arArgs ["PERSONAL_PHONE"])) ($ APPLICATION-\u003e ThrowException ("Mobilní telefon není zadán"); vrátit false;) if (prázdný ($ arArgs ["PERSONAL_STATE"])) ($ APPLICATION-\u003e ThrowException ("Region nebyl zadán"); vrátit false;) if ($ _REQUEST [" USER_AGREE_TERMS "]<> „Y“ || $ _REQUEST ["USER_AGREE_PHONE"]<> „Y“ || $ _REQUEST ["USER_AGREE_EMAIL"]<> "Y") ($ APPLICATION-\u003e ThrowException ("Všechny podmínky musí být přijaty"); return false;) return $ arArgs; ) // ...)
Úkolem obslužné rutiny události je opravit příchozí datové pole $ arArgs nebo deklarovat chybu pomocí metody CMain :: ThrowException () a místo datového pole vrátit false. Bohužel je nemožné zajistit, aby pole, která nás zajímají, procházela $ arArgs, takže musíme analyzovat $ _REQUEST. Výpis lze vylepšit seskupením nalezených chyb, ale bohužel, i když obslužný program uspěje, mohou se později v procesu registrace v jádře vyskytnout další chyby, které však nemůžeme ovlivnit. Uživatel není rád, že během procesu registrace dostává různé chyby. Programátor hledá alternativy.

Událost OnAfterUserAdd se volá nejen po úspěšné samoregistraci uživatele, ale také při volání rozhraní API nebo přidání uživatele do administrativní části, ale datové pole předané manipulátorům této události neovlivní nic kromě samotných obslužných rutin, takže je téměř zbytečné generovat zde výjimky, ale místo toho Chcete-li to provést, můžete provést nějakou společnou logiku pro všechny nové uživatele, například: přidat uživatele do seznamu adresátů, vytvořit pro něj rozpočet v internetovém obchodě nebo přiřadit vlastní vlastnost.
třída CWBroker (// ... veřejná statická funkce OnAfterUserAdd (& $ arFields) (pokud (CModule :: IncludeModule ("dotazy")) ($ CUser \u003d nový CUser (); $ CUser-\u003e aktualizace ($ arFields ["ID "], pole (" UF_TARIFF "\u003d\u003e 1));) if (CModule :: IncludeModule (" sale ")) ($ sale_account \u003d CSaleUserAccount :: GetByUserID ($ arFields [" ID "]," RUB "); pokud (prázdný ($ sale_account)) (CSaleUserAccount :: Add (array ("USER_ID" \u003d\u003e $ arFields ["ID"], "CURRENT_BUDGET" \u003d\u003e 0, "CURRENCY" \u003d\u003e "RUB",));) pokud (CModule :: IncludeModule ("subscribe")) ($ CDBResult \u003d CRubric :: GetList (array ("SORT" \u003d\u003e "ASC"), array ("ACTIVE" \u003d\u003e "Y")); $ rubrics \u003d array ( ); while ($ rubric \u003d $ CDBResult-\u003e Fetch ()) ($ rubrics \u003d $ rubric ["ID"];) $ CSubscription \u003d new CSubscription (); $ CSubscription-\u003e Add (array ("USER_ID" \u003d\u003e $ arFields ["ID"], "EMAIL" \u003d\u003e $ arFields ["EMAIL"], "FORMAT" \u003d\u003e "html", "CONFIRMED" \u003d\u003e "Y", "SEND_CONFIRM" \u003d\u003e "N", "RUB_ID" \u003d\u003e $ rubriky,));)) // ...)

Alternativy

Pokud máte odvahu a dostanete se do zdrojového kódu systémových komponent (autorizace), pak jakákoli touha s nimi pracovat náhle zmizí. Jako zřejmá alternativa, první věc, která mě napadne, je vytvoření vlastních komponent pro autorizaci, registraci a další. Naštěstí vám API umožňuje udělat totéž. V této alternativě však vidím následující odvážné nevýhody:
- náklady na opětovné zavedení logiky (pouze v jedné autorizační složce: ověřovací captcha, zabezpečená autorizace založená na klíčích a autorizace prostřednictvím externích služeb),
- odmítnutí aktualizovat uvažované systémové komponenty, což je zvláště důležité při postupném přechodu jádra na D7,
- neschopnost připojit vlastní autorizační komponentu ke vstupní stránce uživatele v případě, že nemá dostatečná práva k prohlížení stránky; místo toho musí implementovat vlastní logiku přístupu k určitým stránkám a sekcím.

Další alternativou je komponenta bitrix: main.register, která má širokou škálu parametrů. Aby se však tato konkrétní komponenta mohla zobrazit a spustit na vstupní stránce uživatele, musí programátor přejít na trik: vložte volání této komponenty do šablony komponenty registračního systému (bitrix: system.auth.register), což má následující nevýhody:
- stejná sada parametrů komponenty je uložena alespoň na dvou místech: ve veřejné části na autorizační stránce a v šabloně webu,
- při volání bitrix: main.register prostřednictvím šablony komponenty bitrix: system.auth.register je zbytečný kód druhé.

Konečně

Není žádným tajemstvím, že platforma Bitrix není zdaleka ideální. Pokaždé, když vidím takové věci, které narušují mou pokerovou tvář, dorovnám nejprve od podivný, pak se snažím na to přijít a pochopit proč se to dělo takhle a ve většině případů najdu přijatelný Odpovědět. Ale v tomto případě jsem nemohl najít odpověď, tak jsem se rozhodl sepsat všechny úvahy o. Doufám, že se to někomu hodí.

Jako přihlašovací jméno nepoužívejte svou e-mailovou adresu! Správné čitelné přihlášení by mělo být vytvořeno následovně a může obsahovat pouze následující znaky: při vytváření přihlášení lze použít pouze symboly latinské (anglické) abecedy (od A do Z - malá i velká), čísla 0..9 a spojovníky („-“) a podtržítko („_“) jsou všechno! Vašeho přihlášení se nemohou účastnit žádné další postavy (včetně mezer)!


Pozornost! Registrací na webových stránkách www.site / (internetový časopis RuAvtor) a kliknutím na tlačítko „Odeslat“ tím dáváte souhlas se zpracováním vašich osobních údajů v souladu s federálním zákonem „O osobních údajích“ č. 152-FZ ze dne 27. července 2006. let a také potvrďte, že jste četli Pravidla projektu a s Zřeknutí se záruk a bezpodmínečně je přijmout, stejně jako následující Uživatelská smlouva o zpracování osobních údajů... Jinak (v případě vašeho nesouhlasu s jakoukoli položkou Pravidel nebo Zřeknutí se záruk nebo Smlouva s uživatelem o zpracování osobních údajů) byste se neměli registrovat na webových stránkách www.site /.

Uživatelská smlouva o zpracování osobních údajů

Podmínky a účely zpracování osobních údajů


Správa internetového časopisu RuAvtor (stejně jako Správa webu www.site /) zpracovává osobní údaje uživatelů za účelem poskytování služeb webu uživatelům (registrovaným autorům) (viz Pravidla - www..html). Na základě článku 6 federálního zákona ze dne 27. července 2006 č. 152-FZ „O osobních údajích“ není vyžadován samostatný souhlas uživatele se zpracováním jeho osobních údajů. Na základě odstavců. Podle čl. 22 odst. 2 článku 22 tohoto zákona má Správa stránek právo zpracovávat osobní údaje, aniž by oznamovala autorizovanému orgánu ochranu práv subjektů osobních údajů.


Shromažďování osobních údajů


Shromažďování osobních údajů Uživatelů (autorů registrovaných na Webových stránkách) se provádí na Webových stránkách během jejich Registrace, stejně jako v budoucnu, kdy Uživatel zadá další informace o sobě z vlastní iniciativy pomocí služeb Webových stránek. Osobní údaje jsou poskytovány uživatelem a jsou nezbytné při registraci a provádění jejich činností na stránkách.


Předávání osobních údajů


Osobní údaje uživatelů nejsou správou internetového časopisu RuAvtor předávány žádným třetím osobám, s výjimkou poskytování osobních údajů uživatelů za účelem plnění této smlouvy, jakož i na žádost příslušných státních orgánů (státní zastupitelství, policie, soud a další) za účelem dodržení norem platných právních předpisů. RF.

Laravel umožňuje autentizaci velmi jednoduchou. Ve skutečnosti je téměř vše připraveno k použití ihned po vybalení z krabice. Nastavení ověřování se nachází v souboru config / auth.php, který obsahuje několik dobře zdokumentovaných možností konfigurace mechanismu ověřování.

Nastavení databáze

Ve výchozím nastavení používá Laravel v adresáři aplikace model App \\ User Eloquent. Tento model lze použít ve spojení s autentizačním ovladačem založeným na výmluvách. Pokud vaše aplikace nepoužívá Eloquent, můžete použít ovladač ověřování databáze, který používá Laravel Query Builder.

Při vytváření schématu databáze pro model App \\ User se ujistěte, že pole hesla má minimální délku 60 znaků.

Musíte také zajistit, aby vaše tabulka uživatelů (nebo její ekvivalent) obsahovala řetězec s možnou hodnotou null remember_token o délce 100 znaků. Toto pole se používá k uložení tokenu relace, pokud vaše aplikace poskytuje funkci zapamatování si mě. Toto pole můžete vytvořit pomocí $ table-\u003e rememberToken (); v migraci.

Rychlý start

Laravel je dodáván se dvěma řadiči ověřování po vybalení z krabice. Jsou v oboru názvů App \\ Http \\ Controllers \\ Auth. AuthController zpracovává registraci a ověřování uživatelů a PasswordController obsahuje logiku pro resetování hesel stávajících uživatelů. Každý z těchto řadičů používá vlastnosti k povolení požadovaných metod. U mnoha aplikací nebudete muset tyto řadiče upravovat.

Směrování

Pohledy

Ačkoli jsou v rozhraní zahrnuty řadiče ověřování, stále musíte vytvářet šablony, které tyto řadiče vykreslí. Měly by být umístěny v adresáři resources / views / auth. Můžete je libovolně měnit. Šablona přihlašovací stránky by měla být umístěna na resources / views / auth / login.blade.php a šablona pro registraci by měla být umístěna na resources / views / auth / register.blade.php.

Příklad ověřovacího formuláře

(!! csrf_field ()! !}
E-mailem
Heslo
Zapamatuj si mě

Ukázkový registrační formulář

(!! csrf_field ()! !}
název
E-mailem
Heslo
Potvrďte heslo

Ověření

Nyní, když máte trasy a šablony, můžete zaregistrovat a ověřit uživatele vaší aplikace. Řadiče ověřování již obsahují logiku (prostřednictvím vlastností) k ověřování stávajících uživatelů a vytváření nových ve vaší databázi.

Po úspěšném ověření je uživatel přesměrován na / domovskou stránku, pro kterou musíte vytvořit trasu. Cestu přesměrování můžete změnit po ověření pomocí vlastnosti redirectTo v AuthController:

Další přizpůsobení

Můžete upravit třídu AuthController a změnit tak při registraci uživatelů požadovaná pole formuláře nebo změnit způsob vytváření uživatelů v databázi. Tato třída je zodpovědná za ověřování a vytváření nových uživatelů pro vaši aplikaci.

Metoda validátoru třídy AuthController obsahuje pravidla pro ověření nového registračního formuláře uživatele. Můžete to změnit, jak chcete.

Metoda create třídy AuthController je zodpovědná za vytváření nových záznamů App \\ User ve vaší databázi pomocí výmluvného ORM. Můžete jej také upravit tak, aby vyhovoval požadavkům vaší aplikace.

Získání ověřeného uživatele

Ověřeného uživatele můžete získat pomocí fasády Auth:

$ user \u003d Auth :: user ();

Totéž můžete udělat s instancí Illuminate \\ Http \\ Request:

user ()) (// $ request-\u003e user () vrací instanci ověřeného uživatele)))

Kontrola autenticity uživatele v aplikaci

Chcete-li zkontrolovat autenticitu aktuálního uživatele ve vaší aplikaci, můžete použít metodu kontroly fasády Auth, která vrátí true, pokud je uživatel ověřen:

Pokud (Auth :: check ()) (// Uživatel je ověřen)

Můžete však také použít middleware k ověření autentizace uživatele před přístupem ke konkrétním trasám / řadičům.

Omezení přístupu k trasám

Ruční ověření uživatele

Samozřejmě není nutné používat ověřovací řadiče dodávané s Laravelem. Pokud tyto řadiče odeberete, budete muset spravovat ověřování uživatelů pomocí ověřovacích tříd Laravelu. Nebojte se, je to snadné!

Laravelské autentizační služby jsou přístupné pomocí Auth fasády, takže je nutné se ujistit, že je importujete před svou třídou. Dále se podívejme na metodu pokusu:

$ email, "heslo" \u003d\u003e $ heslo])) (// Ověření bylo úspěšné, návrat redirect () -\u003e zamýšlený ("dashboard");)))

Metoda pokusu vezme jako první argument pole párů klíč / hodnota. Hodnoty v tomto poli budou použity k vyhledání uživatele v databázi. V tomto příkladu je tedy uživatel vyhledán e-mailovým polem. Pokud je uživatel nalezen, bude hash hesla z databáze porovnán s hash zadaného hesla v poli. Pokud se hodnoty hash shodují, spustí se pro uživatele relace ověřování.

Metoda pokusu vrátí hodnotu true, pokud bylo ověření úspěšné. Jinak nepravdivé.

Zamýšlená metoda přesměrovače přesměruje uživatele na adresu URL, na kterou se chtěli dostat před ověřením. Záložní adresa URL je uvedena v parametru a bude použita, pokud není k dispozici cesta, kam se uživatel chtěl dostat.

Pokud chcete, můžete kromě e-mailu a hesla přidat také další podmínky pro předávání ověřování. Můžete například zkontrolovat, zda je uživatel aktivní:

If (Auth :: pokus (["email" \u003d\u003e $ email, "heslo" \u003d\u003e $ heslo, "aktivní" \u003d\u003e 1]))) (// Uživatel je aktivní, existuje a zadal správné heslo)

K odhlášení uživatele z aplikace můžete použít metodu odhlášení z fasády Auth. To vymaže informace o ověření z relace uživatele:

Auth :: logout ();

Poznámka: V těchto příkladech nemusí být e-mailové pole použito k vyhledání uživatele, je vybráno pro příklad. K vyhledání uživatele, který je v tabulce uživatelů vaší databáze jedinečný, můžete použít libovolné pole.

Zapamatování uživatelů

Pokud chcete ve své aplikaci implementovat funkci zapamatování, můžete jako druhý argument metody pokusu dodat booleovskou hodnotu. To uživatele autentizuje na dobu neurčitou nebo do ukončení aplikace. Vaše tabulka uživatelů by samozřejmě měla obsahovat pole remember_token, které bude použito k uložení tokenu Remember Me.

If (Auth :: pokus (["email" \u003d\u003e $ email, "heslo" \u003d\u003e $ heslo], $ pamatovat)) (// Uživatel si pamatuje)

Pokud si „pamatujete“ uživatele, můžete pomocí metody viaRemember zjistit, zda se uživatel ověřil pomocí cookie „pamatovat si mě“:

Pokud (Auth :: viaRemember ()) (//)

Další metody ověřování

Ověření instance uživatele

Pokud potřebujete ověřit existujícího uživatele ve vaší aplikaci, můžete zavolat metodu přihlášení na instanci daného uživatele. Tato instance musí implementovat kontrakt Illuminate \\ Contracts \\ Auth \\ Authenticatable. Laravelův výchozí model App \\ User již implementuje toto rozhraní:

Auth :: přihlášení ($ user);

Ověření ID uživatele

K ověření uživatele pomocí jeho ID můžete použít metodu loginUsingId. Tato metoda bere ID uživatele jako argument:

Auth :: loginUsingId (1);

Ověření uživatele na žádost

Metodu once můžete také použít k ověření uživatele ve vaší aplikaci na žádost. Nebude vytvořena žádná relace ani cookie, které lze použít k vytvoření bezstavového API. Metoda Once funguje stejně jako pokus:

If (Auth :: once ($ credentials)) (//)

Základní ověřování HTTP

Bezstavové základní ověřování HTTP

Můžete také použít základní ověřování HTTP bez nastavení souborů cookie pro ověření uživatele v relaci, což může být užitečné při vytváření ověřovacího rozhraní API. Chcete-li to provést, vytvořte prostředníka, který zavolá metodu onceBasic. Pokud onceBasic nic nevrátí, požadavek přejde dále do aplikace.

Resetovat heslo

Nastavení databáze

Většina webových aplikací poskytuje uživateli možnost resetovat heslo. Abyste to nemuseli implementovat do všech aplikací, nabízí Laravel snadný způsob, jak odeslat připomenutí hesla a resetovat heslo.

Nejprve zkontrolujte, zda váš model App \\ User implementuje kontrakt Illuminate \\ Contracts \\ Auth \\ CanResetPassword. Ve výchozím nastavení to dělá a používá vlastnost Illuminate \\ Auth \\ Passwords \\ CanResetPassword, která poskytuje nezbytné metody resetování hesla.

Vytvořte migraci tabulky tokenů pro resetování hesla

Dále musíte vytvořit tabulku, která bude ukládat tokeny pro resetování hesla. Tato migrace je již ve výchozím nastavení zahrnuta v Laravelu v adresáři databáze / migrace. Proto stačí migrovat databázi:

Řemeslník Php migruje

Směrování

Laravel poskytuje třídu Auth \\ PasswordController, která obsahuje veškerou logiku potřebnou k resetování hesel. Budete však muset vytvořit cesty k tomuto řadiči:

// Trasy k vyžádání odkazu k resetování hesla Route :: get ("heslo / e-mail", "Auth \\ [chráněno e-mailem]"); Route :: post (" heslo / e-mail "," Auth \\ [chráněno e-mailem]"); // Trasy pro resetování hesla Route :: get (" heslo / reset / (token) "," Auth \\ [chráněno e-mailem]"); Route :: post (" heslo / reset "," Auth \\ [chráněno e-mailem]");

Pohledy

Kromě definování tras k PasswordController musíte vytvořit šablony, které má váš řadič vykreslit. Nebojte se, příklady takových šablon jsou uvedeny níže. Můžete je stylizovat podle svých potřeb.

Ukázkový formulář žádosti o odkaz na resetování hesla

Musíte vytvořit šablonu HTML pro formulář žádosti o resetování hesla. Tato šablona by měla být umístěna na resources / views / auth / password.blade.php. Formulář obsahuje jediné pole e-mailové adresy, které vám umožní požádat o odkaz pro obnovení hesla:

(!! csrf_field ()! !}
E-mailem

Když uživatel odešle žádost o resetování hesla, obdrží e-mail s odkazem na trasu, která vede k metodě getReset (obvykle / heslo / reset) nástroje PasswordController. Budete si muset vytvořit e-mailovou šablonu na resources / views / emails / password.blade.php. Tato šablona přijímá proměnnou $ token obsahující token pro resetování hesla pro uživatele, který o ni požádal. Příklad takové šablony:

Kliknutím sem obnovíte své heslo: ((url ("heslo / reset /".$ token)))

Příklad formuláře pro resetování hesla

Příklad formuláře pro resetování hesla:

(!! csrf_field ()! !}

Co dělat po resetování hesla

Jakmile definujete trasy a vzory pro resetování hesla, můžete je otestovat ve svém prohlížeči. Třída PasswordController je ve výchozím nastavení součástí rámce a obsahuje veškerou potřebnou logiku pro odesílání e-mailů a resetování hesel v databázi.

Po resetování hesla je uživatel automaticky ověřen ve vaší aplikaci a přesměrován na / domovskou stránku. Tuto cestu můžete změnit vytvořením vlastnosti redirectTo na PasswordController

Chráněno $ redirectTo \u003d "/ dashboard";

Poznámka: Ve výchozím nastavení token pro resetování hesla trvá 1 hodinu. Můžete to změnit v konfiguračním souboru config / auth.php pomocí možnosti připomenutí.expire.

Ověření na sociálních médiích

Kromě ověřování na základě formulářů poskytuje Laravel snadný a pohodlný způsob, jak používat ověřování založené na OAuth pomocí Laravel Socialite. Socialite v současné době podporuje ověřování pomocí Facebooku, Twitteru, Google, GitHub a Bitbucket.

Chcete-li nainstalovat Socialite, přidejte jej jako závislost do composer.json:

Skladatel vyžaduje laravel / prominent

Nastavení

Po instalaci Socialite zaregistrujte poskytovatele služeb Laravel \\ Socialite \\ SocialiteServiceProvider v konfiguračním souboru config / app.php:

"providers" \u003d\u003e [// Ostatní poskytovatelé služeb Laravel \\ Socialite \\ SocialiteServiceProvider :: class,],

Přidejte také fasádu Socialite do pole aliasy konfigurace:

"Socialite" \u003d\u003e Laravel \\ Socialite \\ Fasády \\ Socialite :: třída,

Dále musíte zadat parametry pro službu OAuth, kterou používáte. To lze provést v souboru config / services.php. K dispozici jsou zatím čtyři služby: facebook, twitter, google a github. Příklad:

"github" \u003d\u003e ["client_id" \u003d\u003e "your-github-app-id", "client_secret" \u003d\u003e "your-github-app-secret", "redirect" \u003d\u003e "http: // your-callback- url ",],

Základní použití

Nyní jste připraveni ověřovat uživatele! Musíte vytvořit dvě cesty: jednu k přesměrování uživatele na poskytovatele OAuth a druhou k přijetí zpětného volání od poskytovatele po ověření. Socialite je přístupný pomocí fasády Socialite:

redirect (); ) / ** * Získejte informace o uživateli z GitHubu. * * @return Response * / public function handleProviderCallback () ($ user \u003d Socialite :: driver ("github") -\u003e user (); // $ user-\u003e token;))

Metoda přesměrování se postará o odeslání uživatele poskytovateli OAuth a uživatelská metoda načte příchozí odpověď a získá informace o uživateli od poskytovatele. Před přesměrováním uživatele můžete také určit „rozsahy“ (oprávnění) požadavku pomocí metody oboru. Tato metoda přepíše existující obory:

Vrátit Socialite :: driver ("github") -\u003e obory (["scope1", "scope2"]) -\u003e redirect ();

Získání podrobností o uživateli

Po obdržení uživatelské instance můžete o ní získat další data:

$ user \u003d Socialite :: driver ("github") -\u003e user (); // OAuth Two Providers $ token \u003d $ user-\u003e token; // Poskytovatelé OAuth One $ token \u003d $ user-\u003e token; $ tokenSecret \u003d $ user-\u003e tokenSecret; // Všichni poskytovatelé $ user-\u003e getId (); $ user-\u003e getNickname (); $ user-\u003e getName (); $ user-\u003e getEmail (); $ user-\u003e getAvatar ();

Přidání ověřovacího ovladače

Pokud nepoužíváte tradiční relační databáze k ukládání uživatelů, musíte Laravel rozšířit o svůj vlastní ověřovací ovladač. Chcete-li to provést, použijte k rozšíření ovladače metodu extend fasády Auth. Musíte zadat prodloužení u poskytovatele služeb:

Po přidání ovladače pomocí metody extend můžete na něj přepnout v konfiguračním souboru config / auth.php.

Smlouva s poskytovatelem uživatelů

Implementace kontraktů Illuminate \\ Contracts \\ Auth \\ UserProvider jsou zodpovědné pouze za získání kontraktu Illuminate \\ Contracts \\ Auth \\ Authenticatable z datového úložiště, jako je MySQL, Riak atd. Tato dvě rozhraní umožňují společnosti Laravel používat ověřovací mechanismy bez ohledu na to, jak jsou data aplikací uložena.

Pojďme se podívat na smlouvu Illuminate \\ Contracts \\ Auth \\ UserProvider:

Metoda retrieveById se používá k načtení uživatele z databáze podle jeho ID. Implementace třídy Authenticatable musí být metodou vrácena.

Metoda retrieveByToken načte uživatele podle jeho ID a tokenu „zapamatuj si mě“, který je uložen v poli remember_token. Stejně jako u předchozí metody musí být vrácena implementace třídy Authenticatable.

Metoda updateRememberToken aktualizuje token uživatele. Nový token lze buď znovu vytvořit, když je uživatel ověřen, nebo , když se uživatel odhlásí.

Metoda retrieveByCredentials načte pole dat zadané v metodě Auth :: pokus při autentizaci do aplikace. Tato metoda by měla vyhledávat uživatele podle zadaných dat v úložišti dat. Obvykle prohledává pole uživatelského jména. Mělo by vrátit implementaci rozhraní UserInterface. Tato metoda by neměla kontrolovat heslo uživatele ani jej ověřovat.

Metoda validateCredentials musí ověřit pověření uživatele. Například tato metoda může porovnat řetězec $ user-\u003e getAuthPassword () s Hash :: make z $ credentials ["heslo"]. Tato metoda by měla ověřit uživatelská data a vrátit logickou hodnotu.

Ověřitelná smlouva

Nyní, když jsme pokryli všechny metody UserProvider, pojďme se podívat na Authenticatable. Nezapomeňte, že poskytovatel musí vrátit implementaci tohoto rozhraní z metod retrieveById a retrieveByCredentials:

Rozhraní je jednoduché. Metoda getAuthIdentifier by měla vrátit „primární klíč“ uživatele. Například v MySQl se jedná o jedinečný primární klíč. Metoda getAuthPassword by měla vrátit hodnotu hash hesla uživatele. Toto rozhraní umožňuje ověřovacímu systému pracovat s jakoukoli třídou User, bez ohledu na použitou ORM nebo databázi. Ve výchozím nastavení obsahuje Laravel třídu User ve složce aplikace, která implementuje toto rozhraní, takže ji můžete použít jako příklad.