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
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 auth
middleware 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 dinconfig/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: