Autentisering

varning du bläddrar i dokumentationen för en gammal version av Laravel. Överväg att uppgradera ditt projekt till Laravel 8.x.

  • introduktion
  • autentisera användare
  • hämta den autentiserade användaren
  • skydda rutter
  • HTTP grundläggande autentisering
  • Lösenordspåminnelser & Återställ
  • Social autentisering

introduktion

Laravel gör implementeringen av autentisering mycket enkel. Faktum är att nästan allt är konfigurerat för dig ur lådan. Konfigurationsfilen för autentisering finns på config/auth.php, som innehåller flera väldokumenterade alternativ för att justera beteendet hos autentiseringstjänsterna.

som standard innehåller Laravel en App\User – modell i katalogen app. Denna modell kan användas med standard Eloquent authentication driver.

kom ihåg: när du bygger databasschemat för den här modellen, gör lösenordskolumnen minst 60 tecken. Innan du börjar, se till att din users (eller motsvarande) tabell innehåller en ogiltig sträng remember_token kolumn med 100 tecken. Denna kolumn kommer att användas för att lagra en token för ”Kom ihåg mig” sessioner underhålls av din ansökan. Detta kan göras genom att använda $table->rememberToken(); i en migrering. Naturligtvis skickar Laravel 5 migreringar för dessa kolumner ur lådan!

om din applikation inte använder Eloquent kan du använda autentiseringsdrivrutinen database som använder Laravel query builder.

autentisera användare

Laravel levereras med två autentiseringsrelaterade kontroller ur lådan. AuthController hanterar ny användarregistrering och” inloggning”, medan PasswordController innehåller logiken för att hjälpa befintliga användare att återställa sina glömda lösenord.

var och en av dessa kontroller använder ett drag för att inkludera deras nödvändiga metoder. För många applikationer behöver du inte ändra dessa kontroller alls. Vyerna som dessa styrenheter återger finns i katalogen resources/views/auth. Du är fri att anpassa dessa vyer hur du vill.

Användarregistratorn

för att ändra de formulärfält som krävs när en ny användare registrerar sig med din ansökan kan du ändra klassen App\Services\Registrar. Den här klassen ansvarar för att validera och skapa nya användare av din applikation.

validator – metoden för Registrar innehåller valideringsreglerna för nya användare av applikationen, medan create – metoden för Registrar ansvarar för att skapa nya User – poster i din databas. Du är fri att ändra var och en av dessa metoder som du vill. Registrar kallas av AuthController via metoderna i AuthenticatesAndRegistersUsers – egenskapen.

Manuell autentisering

om du väljer att inte använda den medföljande AuthController – implementeringen måste du hantera autentiseringen av dina användare med Laravel-autentiseringsklasserna direkt. Oroa dig inte, det är fortfarande en cinch! Låt oss först kolla in metoden attempt:

metoden attempt accepterar en rad nyckel / värdepar som sitt första argument. Värdet password kommer att hashas. De andra värdena i matrisen används för att hitta användaren i din databastabell. Så i exemplet ovan kommer användaren att hämtas med värdet av kolumnen email. Om användaren hittas jämförs det hashade lösenordet som lagras i databasen med det hashade password – värdet som skickas till metoden via matrisen. Om de två hashade Lösenorden matchar, startas en ny autentiserad session för användaren.

metoden attempt returnerar true om autentiseringen lyckades. Annars kommer false att returneras.

Obs: i det här exemplet är email inte ett obligatoriskt alternativ, det används bara som ett exempel. Du bör använda vilket kolumnnamn som motsvarar ett ”användarnamn” i din databas.

intended omdirigeringsfunktionen omdirigerar användaren till den URL de försökte komma åt innan de fångades av autentiseringsfiltret. En reserv URI kan ges till denna metod om den avsedda destinationen inte är tillgänglig.

autentisera en användare med villkor

du kan också lägga till extra villkor i autentiseringsfrågan:

if (Auth::attempt()){ // The user is active, not suspended, and exists.}

bestämma om en användare är autentiserad

för att avgöra om användaren redan är inloggad i din applikation kan du använda metoden check :

if (Auth::check()){ // The user is logged in...}

autentisera en användare och” komma ihåg ” dem

om du vill tillhandahålla ”kom ihåg mig” – funktionalitet i din applikation kan du skicka ett booleskt värde som det andra argumentet till metoden attempt, vilket kommer att hålla användaren autentiserad på obestämd tid, eller tills de loggar ut manuellt. Naturligtvis måste din users – tabell innehålla strängen remember_token – kolumnen, som kommer att användas för att lagra ”kom ihåg mig” – token.

if (Auth::attempt(, $remember)){ // The user is being remembered...}

om du” kommer ihåg ”användare kan du använda metoden viaRemember för att avgöra om användaren autentiserades med cookien” kom ihåg mig”:

if (Auth::viaRemember()){ //}

autentisera användare med ID

för att logga in en användare i applikationen med deras ID, använd metoden loginUsingId :

Auth::loginUsingId(1);

validera användaruppgifter utan inloggning

metoden validate låter dig validera en användares referenser utan att faktiskt logga in dem i applikationen:

if (Auth::validate($credentials)){ //}

logga in en användare för en enda begäran

du kan också använda metoden once för att logga in en användare i applikationen för en enda begäran. Inga sessioner eller cookies kommer att användas:

if (Auth::once($credentials)){ //}

manuellt logga in en användare

om du behöver logga in en befintlig användarinstans i din applikation kan du ringa login – metoden med användarinstansen:

Auth::login($user);

detta motsvarar att logga in en användare via referenser med metoden attempt.

logga en användare ur applikationen

Auth::logout();

naturligtvis, om du använder de inbyggda Laravel-autentiseringskontrollerna, tillhandahålls en kontrollmetod som hanterar loggning av användare ur applikationen ur lådan.

Autentiseringshändelser

när attempt – metoden anropas kommer auth.attempt – händelsen att avfyras. Om autentiseringsförsöket lyckas och användaren är inloggad kommer auth.login – händelsen också att avfyras.

hämta den autentiserade användaren

när en användare har autentiserats finns det flera sätt att få en instans av användaren.

först kan du komma åt användaren från Auth fasad:

för det andra kan du komma åt den autentiserade användaren via en Illuminate\Http\Request instans:

för det tredje kan du skriva-antyda Illuminate\Contracts\Auth\Authenticatable – kontraktet. Denna typ-tips kan läggas till en controller konstruktör, controller metod, eller någon annan konstruktör av en klass lösas av servicebehållaren:

skydda rutter

Route middleware kan användas för att tillåta endast autentiserade användare att komma åt en viss rutt. Laravel tillhandahåller authmiddleware som standard, och det definieras i app\Http\Middleware\Authenticate.php. Allt du behöver göra är att bifoga det till en ruttdefinition:

HTTP Basic Authentication

HTTP Basic Authentication ger ett snabbt sätt att autentisera användare av din applikation utan att skapa en dedikerad ”inloggningssida”. För att komma igång, bifoga auth.basic middleware till din rutt:

skydda en rutt med HTTP Basic

Route::get('profile', );

som standard använder basic middleware kolumnen email i användarposten som ”användarnamn”.

ställa in ett statslöst HTTP Basic-Filter

du kan också använda HTTP Basic-autentisering utan att ställa in en användaridentifieringskaka i sessionen, vilket är särskilt användbart för API-autentisering. För att göra det, definiera en middleware som anropar metoden onceBasic :

public function handle($request, Closure $next){ return Auth::onceBasic() ?: $next($request);}

om du använder PHP FastCGI kanske HTTP Basic-autentisering inte fungerar korrekt ur rutan. Följande rader ska läggas till i din .htaccess – fil:

RewriteCond %{HTTP:Authorization} ^(.+)$RewriteRule .* - 

lösenord påminnelser & Återställ

Modell & tabell

de flesta webbapplikationer ger ett sätt för användare att återställa sina glömda lösenord. I stället för att tvinga dig att implementera detta på varje applikation, ger Laravel praktiska metoder för att skicka lösenordspåminnelser och utföra lösenordsåterställningar.

för att komma igång, kontrollera att din User – modell implementerar Illuminate\Contracts\Auth\CanResetPassword – kontraktet. Naturligtvis implementerar User – modellen som ingår i ramverket redan detta gränssnitt och använder egenskapen Illuminate\Auth\Passwords\CanResetPassword för att inkludera de metoder som behövs för att implementera gränssnittet.

generera migrering av Påminnelsetabellen

Därefter måste en tabell skapas för att lagra lösenordsåterställningstoken. Migreringen för den här tabellen ingår i Laravel ur rutan och finns i katalogen database/migrations. Så allt du behöver göra är att migrera:

php artisan migrate

Password Reminder Controller

Laravel innehåller också en Auth\PasswordController som innehåller logiken som krävs för att återställa användarlösenord. Vi har även gett synpunkter för att komma igång! Vyerna finns i katalogen resources/views/auth. Du är fri att ändra dessa vyer som du vill passa din egen applikations design.

din användare kommer att få ett e-postmeddelande med en länk som pekar på getReset – metoden för PasswordController. Denna metod kommer att göra lösenordsåterställningsformuläret och tillåta användare att återställa sina lösenord. När lösenordet har återställts loggas användaren automatiskt in i programmet och omdirigeras till /home. Du kan anpassa omdirigeringsplatsen efter återställning genom att definiera en redirectTo – egenskap på PasswordController:

protected $redirectTo = '/dashboard';

Obs: som standard upphör lösenordsåterställningstoken efter en timme. Du kan ändra detta via alternativet reminder.expire i din config/auth.php – fil.

Social autentisering

förutom typisk, formbaserad autentisering ger Laravel också ett enkelt och bekvämt sätt att autentisera med OAuth-leverantörer som använder Laravel Socialite. Socialite stöder för närvarande autentisering med Facebook, Twitter, Google, GitHub och Bitbucket.

för att komma igång med Socialite, inkludera paketet i din composer.json – fil:

"laravel/socialite": "~2.0"

registrera sedan Laravel\Socialite\SocialiteServiceProvider i din config/app.php konfigurationsfil. Du kan också registrera en fasad:

'Socialize' => 'Laravel\Socialite\Facades\Socialite',

du måste lägga till referenser för de OAuth-tjänster som din applikation använder. Dessa referenser ska placeras i din config/services.php konfigurationsfil och ska använda nyckeln facebook, twitter, google, eller github, beroende på vilka leverantörer din ansökan kräver. Till exempel:

'github' => ,

därefter är du redo att autentisera användare! Du behöver två rutter: en för att omdirigera användaren till OAuth-leverantören och en annan för att ta emot återuppringning från leverantören efter autentisering. Här är ett exempel med Socialize fasad:

metoden redirect tar hand om att skicka användaren till OAuth-leverantören, medan metoden user läser den inkommande begäran och hämtar användarens information från leverantören. Innan du omdirigerar användaren kan du också ställa in ”scopes” på begäran:

return Socialize::with('github')->scopes()->redirect();

när du har en användarinstans kan du ta några fler detaljer om användaren:

hämta användarinformation