Laravel Kimlik Doğrulaması İçin Kapsamlı Bir Kılavuz

Yayınlanan: 2023-03-23

Kimlik doğrulama, web uygulamalarının en kritik ve temel özelliklerinden biridir. Laravel gibi web çerçeveleri, kullanıcıların kimlik doğrulaması yapması için birçok yol sağlar.

Laravel kimlik doğrulama özelliklerini hızlı ve güvenli bir şekilde uygulayabilirsiniz. Ancak, bu kimlik doğrulama özelliklerinin zayıf bir şekilde uygulanması riskli olabilir çünkü kötü niyetli taraflar bunlardan yararlanabilir.

Bu kılavuz, seçtiğiniz Laravel kimlik doğrulama yöntemlerine başlamak için bilmeniz gereken her şeyi size öğretecektir.

Okumaya devam etmek!

Laravel Kimlik Doğrulamasına Giriş

Laravel, "bekçiler" ve "sağlayıcılar"dan oluşan modüller sunar. Korumalar, her istek için kullanıcı kimlik doğrulamasını tanımlar ve sağlayıcılar, kalıcı depolamadan (örn. MySQL veritabanı) kullanıcı alımını tanımlar.

config/auth.php adlı bir dosyada kimlik doğrulama parametrelerimizi tanımlıyoruz. Laravel'in kimlik doğrulama davranışını ince ayar yapmak ve değiştirmek için çeşitli seçenekler içerir.

Öncelikle, kimlik doğrulama varsayılanlarını tanımlamanız gerekir. Bu seçenek, uygulamanızın varsayılan kimlik doğrulama "koruma" ve parola sıfırlama seçeneklerini kontrol eder. Bu varsayılanları gerektiği gibi değiştirebilirsiniz, ancak çoğu uygulama için mükemmel bir başlangıçtır.

Ardından, uygulamanız için kimlik doğrulama korumalarını tanımlarsınız. Burada, varsayılan yapılandırmamız oturum depolamayı ve Eloquent kullanıcı sağlayıcısını kullanır. Tüm kimlik doğrulama sürücülerinin bir kullanıcı sağlayıcısı vardır.

 return [ /* Defining Authentication Defaults */ 'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], /* Defining Authentication Guards Supported: "session" */ 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], ], /* Defining User Providers Supported: "database", "eloquent" */ 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], ], /* Defining Password Resetting */ 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, 'throttle' => 60, ], ], /* Defining Password Confirmation Timeout */ 'password_timeout' => 10800, ];

Daha sonra, tüm kimlik doğrulama sürücülerinin bir kullanıcı sağlayıcısı olduğundan emin oluruz. Bu, kullanıcılarınızın verilerini sürdürmek için veritabanınızdan veya diğer depolama mekanizmalarından kullanıcıların nasıl alınacağını tanımlar. Birden çok kullanıcı tablonuz veya modeliniz varsa, her modeli veya tabloyu temsil eden birden çok kaynak yapılandırabilirsiniz. Bu kaynaklar, tanımladığınız herhangi bir ekstra kimlik doğrulama görevlisine atanabilir.

Kullanıcılar ayrıca şifrelerini sıfırlamak isteyebilir. Bunun için, uygulamada birden fazla kullanıcı tablonuz veya modeliniz varsa ve belirli kullanıcı türlerine göre ayrı ayarlar istiyorsanız, birden fazla parola sıfırlama yapılandırması belirtebilirsiniz. Sona erme süresi, her sıfırlama belirtecinin geçerli olacağı dakika sayısıdır. Bu güvenlik özelliği, belirteçleri kısa ömürlü tutar, böylece tahmin edilmeleri için daha az zamanları olur. Bunu gerektiği gibi değiştirebilirsiniz.

Son olarak, parola onayı zaman aşımına uğramadan ve kullanıcıdan onay ekranı aracılığıyla parolasını yeniden girmesi istenmeden önce süreyi tanımlamanız gerekir. Varsayılan olarak, zaman aşımı üç saat sürer.

Laravel Kimlik Doğrulama Yöntemlerinin Türleri

Her senaryoyu doğrulamanın mükemmel bir yolu yoktur, ancak bunları bilmek daha iyi kararlar almanıza yardımcı olacaktır. Bu ve Laravel'in Laravel 9'daki yeni özelliklerle nasıl geliştiği. Bu, kimlik doğrulama modları arasında geçiş yaparken geliştiriciler olarak işimizi çok daha kolay hale getiriyor.

Parola Tabanlı Kimlik Doğrulama

Bir kullanıcının kimliğini doğrulamanın ilkel bir yolu olarak, binlerce kuruluş tarafından hala kullanılmaktadır, ancak mevcut gelişmeler göz önüne alındığında, açıkça güncelliğini yitirmektedir.

Satıcılar, son kullanıcı için minimum sürtüşme sağlarken karmaşık parola uygulamalarını zorunlu kılmalıdır.

Oldukça basit çalışır, kullanıcı adı ve parolayı girer ve Veritabanında bu ikisi arasında bir eşleşme varsa, sunucu isteğin kimliğini doğrulamaya karar verir ve kullanıcının önceden tanımlanmış bir süre için kaynaklara erişmesine izin verir.

Belirteç Tabanlı Kimlik Doğrulama

Bu metodoloji, kullanıcıya doğrulama sonrasında benzersiz bir belirteç verildiğinde kullanılır.

Bu simgeye sahip olan kullanıcı artık ilgili kaynaklara erişebilir. Ayrıcalık, belirtecin süresi dolana kadar etkindir.

Belirteç etkinken, kullanıcının herhangi bir kullanıcı adı veya şifre kullanması gerekmez, ancak yeni bir belirteç alındığında bu ikisi gereklidir.

Belirteçler, tüm kimlik doğrulama verilerini içeren durumsuz varlıklar oldukları için günümüzde birden çok senaryoda yaygın olarak kullanılmaktadır.

Belirteç oluşturmayı belirteç doğrulamasından ayırmanın bir yolunu sağlamak, satıcılara çok fazla esneklik sağlar.

Çok Faktörlü Kimlik Doğrulama

Adından da anlaşılacağı gibi, sağladığı güvenliği yükselten en az iki kimlik doğrulama faktörü kullanmayı gerektirir.

Yalnızca iki faktör içeren iki faktörlü kimlik doğrulamanın aksine, bu yöntem iki, üç, dört ve daha fazlasını içerebilir…

Bu yöntemin tipik uygulaması, bir parola kullanmayı içerir ve ardından kullanıcıya akıllı telefonunda bir doğrulama kodu gönderilir. Bu yöntemi uygulayan satıcılar, hızla ölçeklenirken büyük sorunlara dönüşebilecek yanlış pozitifleri ve ağ kesintilerini aramalıdır.

Laravel Kimlik Doğrulaması Nasıl Uygulanır?

Bu bölüm size, uygulamanızın kullanıcılarının kimliğini doğrulamanın birçok yolunu öğretecektir. Jetstream, Breeze ve Socialite gibi bazı kitaplıklarda bunların nasıl kullanılacağına ilişkin ücretsiz eğitimler bulunur.

Manuel Kimlik Doğrulama

Kullanıcıları kaydettirerek ve gerekli yolları routes/web.php içinde oluşturarak başlayın .

Biri formu görüntülemek ve diğeri kaydolmak için iki yol oluşturacağız:

 use App\Http\Contrllers\Auth\RegisterController; use Illuminate\Support\Facades\Route; /* Web Routes Register web routes for your app's RouteServiceProvider in a group containing the "web" middleware */ Route::get('/register', [RegisterController::class], 'create']); Route::post('/register', [RegisterController::class], 'store']);

Ve bunlar için gereken denetleyiciyi oluşturun:

 php artisan make controller Auth/RegisterController -r

Şimdi kodu aşağıdaki gibi güncelleyin:

 namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use illuminate\Htpp\Request; class RegisterController extends Controller { public function create() { return view('auth.register'); } public function store(Request $request) { } }

Denetleyici artık boştur ve kaydedilecek bir görünüm döndürür. resources/views/auth içinde bu görünümü oluşturalım ve ona register.blade.php adını verelim.

Kullanıcıları kaydetmek için laravel bıçak görünümü.
Kullanıcıları kaydetmek için laravel bıçak görünümü.

Şimdi her şey yerli yerinde, /register rotamızı ziyaret etmeli ve aşağıdaki formu görmeliyiz:

 public function store(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials, $request->filled('remember'))) { $request->session()->regenerate(); return redirect()->intended('/'); } return back()->withErrors([ 'email' => 'The provided credentials do not match our records.', ]); }

Artık bir kullanıcının doldurabileceği ve bunun için verileri alabileceği bir formu görüntüleyebildiğimize göre, kullanıcıların verilerini almalı, doğrulamalı ve her şey yolundaysa veritabanında saklamalıyız. Burada, girdiğiniz verilerin eksiksiz olduğundan emin olmak için bir veritabanı işlemi kullanmalısınız.

Üç kimlik bilgisinin de gerekli olduğundan emin olmak için Laravel'in istek doğrulama özelliğini kullanacağız. E-postanın bir e-posta formatına sahip olduğundan ve users tablosunda benzersiz olduğundan ve şifrenin onaylandığından ve en az 8 karakter içerdiğinden emin olmalıyız:

 namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; class RegisterController extends Controller { public function store(Request $request) { /* Validation */ $request->validate([ 'name' => 'required', 'email' => 'required|email|unique:users', 'password' => 'required|confirmed|min:8', ]); /* Database Insert */ $user = User:;create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), ]); return back(); } public function create() { return view('auth.register'); } }

Artık girdimiz doğrulandığına göre, doğrulamamıza aykırı olan herhangi bir şey şu şekilde görüntülenecek bir hata verecektir:

Kayıt için geçersiz giriş örneği
Kayıt için geçersiz giriş örneği

store yönteminde bir kullanıcı hesabı oluşturduğumuzu varsayarsak, kullanıcıda da oturum açmak istiyoruz. Bunu yapabileceğimiz iki yol var. Manuel olarak yapabiliriz veya Auth cephesini kullanabiliriz.

Kullanıcı oturum açtıktan sonra, onları Kayıt ekranına değil, gösterge tablosu veya ana sayfa gibi yeni bir sayfaya döndürmeliyiz. Burada yapacağımız şey bu:

 namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; class RegisterController extends Controller { public function store(Request $request) { /* Validation */ $request->validate([ 'name' => 'required', 'email' => 'required|email|unique:users', 'password' => 'required|confirmed|min:8', ]); /* Database Insert */ $user = User:;create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), ]); Auth::login($user): return redirect(RouteServiceProvider::HOME); } public function create() { return view('auth.register'); } }

Ve artık kayıtlı ve -n oturum açmış bir kullanıcımız olduğuna göre, onun güvenli bir şekilde oturumu kapatabileceğinden emin olmalıyız.

Laravel oturumu geçersiz kılmamızı ve oturumu kapattıktan sonra güvenlik için belirteci yeniden oluşturmamızı önerir. Ve bu tam olarak yapacağımız şey. LogoutController'ın destroy yöntemini kullanarak yeni bir /logout rotası oluşturarak başlıyoruz:

 use App\Http\Controllers\Auth\RegisterController; use App\Http\Controllers\Auth\LogoutController; use Illuminate\Support\Facades\Route; /* Web Routes Here is where you can register web routes for your application. These routes are loaded by the RrouteServiceProvider with a group which contains the "web" middleware group. Now create something great! */ Route::get('/register', [RegisterController::class, 'create']); Route::post('/register', ['RegisterController::class, 'store']); Route::post('/logout', [Logoutcontroller::class, 'destroy']) ->middleware('auth');

Çıkışı “auth” ara yazılımından geçirmek çok önemlidir. Kullanıcılar, oturum açmamışlarsa rotaya erişememelidir.

Şimdi, daha önce yaptığımız gibi bir denetleyici oluşturun:

 php artisan make:controller Auth/LogoutController -r

destroy yönteminde parametre olarak request almamızı sağlayabiliriz. Auth cephesi aracılığıyla kullanıcının oturumunu kapatıyoruz, oturumu geçersiz kılıyoruz ve belirteci yeniden oluşturuyoruz, ardından kullanıcıyı ana sayfaya yönlendiriyoruz:

 namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class LogoutController extends Controller { public function destroy(Request $request) { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect('/'); } }

Kullanıcıları Hatırlamak

Modern web uygulamalarının tümü olmasa da çoğu, oturum açma formlarında bir "beni hatırla" onay kutusu sağlar.

Bir "beni hatırla" işlevi sağlamak istiyorsak, try yöntemine ikinci argüman olarak bir boole değeri iletebiliriz.

Geçerli olduğunda, Laravel kullanıcının kimliğini süresiz olarak veya manuel olarak çıkış yapana kadar kullanıcıyı doğrular. Kullanıcı tablosu, "beni hatırla" belirtecimizi depolayacağımız yer olan remember_token (belirteçleri yeniden oluşturmamızın nedeni budur) sütununu içermelidir.

Kullanıcılar için varsayılan geçiş zaten bunu içeriyor.

Öncelikle beni hatırla alanını formunuza eklemelisiniz:

beni hatırla alan formu
Şuradan beni hatırla alanı ekleniyor:

Ve bundan sonra, istekten kimlik bilgilerini alın ve bunları Auth cephesindeki deneme yönteminde kullanın.

Kullanıcının hatırlanması gerekiyorsa, onun oturumunu açacağız ve onu ana sayfamıza yönlendireceğiz. Aksi takdirde bir hata atarız:

 public function store(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials, $request->filled('remember'))) { $request->session()->regenerate(); return redirect()->intended('/'); } return back()->withErrors([ 'email' =>

Parolaları Sıfırlama

Günümüzde çoğu web uygulaması, kullanıcıların parolalarını sıfırlamaları için yollar sağlar.

Unutulan şifre için başka bir rota oluşturacağız ve yaptığımız gibi controller oluşturacağız. Ek olarak, tüm süreç için belirteci içeren parola sıfırlama bağlantısı için bir yol ekleyeceğiz:

 Route::post('/forgot-password', [ForgotPasswordLinkController::class, 'store']); Route::post('/forgot-password/{token}', [ForgotPasswordController::class, 'reset']);

Mağaza yönteminin içinde, e-postayı istekten alıp yaptığımız gibi doğrulayacağız.

Bundan sonra şifre cephesinden sendResetLink yöntemini kullanabiliriz.

Ardından, bir yanıt olarak, bağlantıyı göndermeyi başardığında durumu veya aksi halde hata verdiğinde durumu döndürmek istiyoruz:

 namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Password; class ForgotPasswordLinkController extends Controller { public function store(Request $request) { $request->validate([ 'email' => 'required|email', ]); $status = Password::sendResetLink( $request->only('email'); ); return $status === Password::RESET_LINK_SENT ? back()->with('status', __($status)) : back()->withInput($request->only('email'))->withErrors(['email' => __($status)]); } }

Artık reset linki kullanıcının e-posta adresine gönderildiğine göre bundan sonra ne olacak mantığına dikkat etmeliyiz.

İstekte jetonu, e-postayı ve yeni şifreyi alacağız ve bunları doğrulayacağız.

Bundan sonra, Laravel'in perde arkasındaki diğer her şeyi halletmesine izin vermek için şifre cephesinden sıfırlama yöntemini kullanabiliriz.

Güvenli tutmak için her zaman parolayı karma hale getireceğiz.

Sonunda, şifrenin sıfırlanıp sıfırlanmadığını kontrol edeceğiz ve eğer öyleyse, başarılı bir mesajla kullanıcıyı giriş ekranına yönlendireceğiz. Aksi takdirde, sıfırlanamayacağına dair bir hata görüntüleriz:

 namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Password; use Illuminate\Support\Str; class ForgotPasswordController extends Controller { public function store(Request $request) { $request->validate([ 'token' => 'required', 'email' => 'required|email', 'password' => 'required|string|confirmed|min:8', ]); $status = Password::reset( $request->only('email', 'password', 'password_confirmation', 'token'), function ($user) use ($request) { $user->forceFill( 'password' => Hash::make($request->password), 'remember_token' => Str::random(60) ])->save(); } ); return $status == Password::PASSWORD_RESET ? redirect()->route('login')->with('status', __($status)) : back()->withInput($request->only('email'))->withErrors(['email' => __($status)]); } }

Laravel Esintisi

Laravel Breeze, Laravel kimlik doğrulama özelliklerinin basit bir uygulamasıdır: oturum açma, kayıt, parola sıfırlama, e-posta doğrulama ve parola onayı. Yeni Laravel uygulamanızda kimlik doğrulaması uygulamak için kullanabilirsiniz.

Kurulum ve Kurulum

Laravel uygulamanızı oluşturduktan sonra tek yapmanız gereken veritabanınızı yapılandırmak, geçişlerinizi çalıştırmak ve besteci aracılığıyla laravel/breeze paketini kurmak:

 composer require laravel/breeze –dev

Bundan sonra, aşağıdakileri çalıştırın:

 php artisan breeze:install

Kimlik doğrulama görünümlerinizi, rotalarınızı, denetleyicilerinizi ve kullandığı diğer kaynakları yayınlayacak. Bu adımdan sonra, Breeze'in sağladığı her şey üzerinde tam kontrole sahip olursunuz.

Şimdi uygulamamızı ön uca dönüştürmemiz gerekiyor, bu yüzden JS bağımlılıklarımızı kuracağız (@vite kullanacak):

 npm install

:

 npm run dev

Bundan sonra giriş ve kayıt linkleri ana sayfanızda olmalı ve her şey sorunsuz çalışmalıdır.

Laravel Jet Akışı

Laravel Jetstream, kullanışlı özellikler ve diğer ön uç yığınlarıyla Laravel Breeze'i genişletir.

Oturum açma, kayıt, e-posta doğrulama, iki faktörlü kimlik doğrulama, oturum yönetimi, Sanctum aracılığıyla API desteği ve isteğe bağlı ekip yönetimi sağlar.

Jetstream'i kurarken ön uçta Livewire ve Inertia arasında seçim yapmalısınız. Arka uçta, Laravel için bir ön uç agnostik, "başsız" kimlik doğrulama arka ucu olan Laravel Fortify'ı kullanır.

Kurulum ve Kurulum

Laravel Projemizde besteci aracılığıyla kuracağız:

 composer require laravel/jetstream

Bundan sonra, Livewire veya Inertia [stack] argümanlarını kabul eden php artisan jetstream:install [stack] komutunu çalıştıracağız. Ekipler özelliğini etkinleştirmek için –team seçeneğini geçebilirsiniz.

Bu aynı zamanda test için Pest PHP kuracaktır.

Ve son olarak, aşağıdakileri kullanarak uygulamamızın ön yüzünü oluşturmalıyız:

 npm install npm run dev

Laravel Takviyesi

Laravel Fortify, ön uçtan bağımsız bir arka uç kimlik doğrulama uygulamasıdır. Laravel'in kimlik doğrulama özelliklerini uygulamak için Laravel Fortify'ı kullanmak zorunda değilsiniz.

Ayrıca Breeze ve Jetstream gibi başlangıç ​​kitlerinde de kullanılır. Yalnızca bir arka uç uygulaması olan Fortify'ı bağımsız olarak da kullanabilirsiniz. Tek başına kullanırsanız, ön ucunuz Fortify rotalarını çağırmalıdır.

Kurulum ve Kurulum

Fortify'ı besteci aracılığıyla kurabiliriz:

 composer require laravel/fortify

Şimdi Fortify'ın kaynaklarını yayınlamamız gerekiyor:

 php artisan vendor:publish –provider="Laravel\Fortify\FortifyServiceProvider"

Bundan sonra, yeni FortifyServiceProvider , yapılandırma dosyası ve veritabanı taşıma işlemlerine ek olarak yeni bir app/Actions dizini oluşturacağız.

Son olarak şunu çalıştırın:

 php artisan migrate

Veya:

 php artisan migrate:fresh

Ve Fortify'ınız kullanıma hazır.

laravel sosyetik

Laravel, basit bir OAuth tabanlı kullanıcı kimlik doğrulama özelliği içerir. Facebook, Twitter, LinkedIn, Google, Bitbucket, GitHub ve GitLab aracılığıyla sosyal oturum açmayı destekler.

Kurulum

Bunu besteci aracılığıyla kurabiliriz:

 composer require laravel/socialite

Kurulum ve Kullanım

Kurduktan sonra uygulamamızın kullandığı OAuth sağlayıcısının kimlik bilgilerini eklemeliyiz. Bunları her hizmet için config/services.php dosyasına ekleyeceğiz.

Yapılandırmada, anahtarı önceki hizmetlerle eşleştirmeliyiz. Bu anahtarlardan bazıları şunlardır:

  • Facebook
  • twitter (OAuth 1.0 için)
  • twitter-oauth-2 (OAuth 2.0 için)
  • Linkedin
  • google
  • github
  • gitlab
  • bit kovası

Bir hizmet yapılandırması şöyle görünebilir:

 'google' => [ 'client_id' => env("GOOGLE_CLIENT_ID"), 'client_secret' => env("GOOGLE_CLIENT_SECRET"), 'redirect' => "http://example.com/callback-url", ],

Kullanıcıların Kimlik Doğrulaması

Bu eylem için, biri kullanıcıyı OAuth sağlayıcısına yönlendirmek için olmak üzere iki yola ihtiyacımız olacak:

 use Laravel\Socialite\Facades\Sociliate; Route::get('/auth/redirect', function () { return Socialite:;driver('google')->redirect(); });

Ve kimlik doğrulamasından sonra sağlayıcıdan gelen geri arama için bir tane:

 use Laravel\Socialite\Facades\Socialite; Route:;get('/auht/callback', function () { $user = Socialite:;driver('google')->user(); // Getting the user data $user->token; });

Socialite yönlendirme yöntemini sağlar ve cephe kullanıcıyı OAuth sağlayıcısına yönlendirirken, kullanıcı yöntemi gelen isteği inceler ve kullanıcı bilgilerini alır.

Kullanıcımızı aldıktan sonra, veritabanımızda var olup olmadığını kontrol etmeli ve kimliğini doğrulamalıyız. Mevcut değilse, kullanıcıyı temsil edecek yeni bir kayıt oluşturacağız:

 use App\Models\User; use Illuminate\Support\Facades\Auth; use Laravel\Socialite\Facades\Socialite; Route::get('/auth/callback', function () { /* Get the user */ $googleUser = Socialite::driver('google')->user(); /* Create the user if it does not exist Update the user if it exists Check for google_id in database */ $user = User::updateOrCreate([ 'google_id' => $googleUser->id, ], [ 'name' => $googleUser->name, 'email' => $googleUser->email, 'google_token' => $googleUser->token, 'google_refresh_token' => $googleUser->refreshToken, ]); /* Authenticates the user using the Auth facade */ Auth::login($user); return redirect('/dashboard'); });

Kullanıcının erişim kapsamlarını sınırlamak istiyorsak, kimlik doğrulama isteğine dahil edeceğimiz scopes yöntemini kullanabiliriz. Bu, önceden belirtilen tüm kapsamları belirtilenlerle birleştirecektir.

Buna bir alternatif, mevcut diğer tüm kapsamların üzerine yazan setScopes yöntemini kullanmaktır:

 use Laravel\Socialite\Facades\Socialite; return Socialite::driver('google') ->scopes(['read:user', 'write:user', 'public_repo']) ->redirect(); return Socialite::driver('google') ->setScopes(['read:user', 'public_repo') ->redirect();

Artık her şeyi ve geri aramadan sonra bir kullanıcıyı nasıl elde edeceğimizi bildiğimize göre, ondan alabileceğimiz bazı verilere bakalım.

OAuth1 Kullanıcısının token ve tokenSecret var:

 $user = Socialite::driver('google')->user(); $token = $user->token; $tokenSecret = $user->tokenSecret;

OAuth2 token , refreshToken ve expiresIn sağlar:

 $user = Socialite::driver('google')->user(); $token = $user->token; $refreshToken = $user->refreshToken; $expiresIn = $user->expiresIn;

Hem OAuth1 hem de OAuth2 getId , getNickname , getName , getEmail ve getAvatar sağlar:

 $user = Socialite::driver('google')->user(); $user->getId(); $user->getNickName(); $user->getName(); $user->getEmail(); $user->getAvatar();

Ve bir belirteçten (OAuth 2) veya bir belirteç ve sırdan (OAuth 1) kullanıcı ayrıntılarını almak istiyorsak, sanctum bunun için iki yöntem sağlar: userFromToken ve userFromTokenAndSecret :

 use Laravel\Socialite\Facades\Socialite; $user = Socialite:;driver('google')->userFromToken($token); $user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);

Laravel Tapınağı

Laravel Sanctum, SPA'lar (Tek Sayfa Uygulamaları) ve mobil uygulamalar için basit bir kimlik doğrulama sistemidir. Kullanıcıların belirli kapsamlara sahip birden çok API belirteci oluşturmasına olanak tanır. Bu kapsamlar, bir belirteç tarafından izin verilen eylemleri belirtir.

kullanımlar

Sanctum, OAuth'un incelikleri olmadan kullanıcıya API Jetonları vermek için kullanılabilir. Bu belirteçlerin tipik olarak yıllar gibi uzun kullanım süreleri vardır, ancak herhangi bir zamanda kullanıcı tarafından iptal edilebilir ve yeniden oluşturulabilir.

Kurulum ve Kurulum

Bunu besteci aracılığıyla kurabiliriz:

 composer require laravel/sanctum

Yapılandırma ve taşıma dosyalarını yayınlamamız gerekiyor:

 php artisan vendor:publish –provider="Laravel\Sanctum\SanctumServiceProvider"

Artık yeni taşıma dosyaları oluşturduğumuza göre, bunları taşımamız gerekiyor:

 php artisan migrate </code> or <code> php artisan migrate:fresh

API Jetonları Nasıl Verilir

Belirteçleri yayınlamadan önce, Kullanıcı modelimiz Laravel\Sanctum\HasApiTokens özelliğini kullanmalıdır:

 use Laravel\Sanctum\HasApiTokens; class User extends Authenticable { use HasApiTokens; }

Kullanıcıya sahip olduğumuzda, bir Laravel\Sanctum\NewAccessToken örneği döndüren createToken yöntemini çağırarak bir belirteç verebiliriz.

Token'ın SHA-256 düz metin değerini görmek için NewAccessToken örneğinde plainTextToken yöntemini çağırabiliriz.

Laravel Kimlik Doğrulaması için İpuçları ve En İyi Uygulamalar

Diğer Cihazlardaki Oturumları Geçersiz Kılma

Daha önce tartıştığımız gibi, kullanıcı oturumu kapattığında oturumu geçersiz kılmak çok önemlidir, ancak bu aynı zamanda sahip olunan tüm cihazlar için bir seçenek olarak sunulmalıdır.

Bu özellik genellikle kullanıcı parolasını değiştirdiğinde veya güncellediğinde kullanılır ve biz oturumunu başka herhangi bir cihazdan geçersiz kılmak isteriz.

Auth cephesi ile sağlanan bu, başarılması kolay bir iştir. Kullandığımız rotanın auth ve auth.session middleware sahip olduğunu düşünürsek, cephenin logoutOtherDevices statik yöntemini kullanabiliriz:

 Route::get('/logout', [LogoutController::class, 'invoke']) ->middleware(['auth', 'auth.session']);
 use Illuminate\Support\Facades\Auth; Auth::logoutOtherDevices($password);

Auth::routes() ile Yapılandırma

Auth cephesinin yollar yöntemi, kullanıcı kimlik doğrulaması için gereken tüm yolları oluşturmak için yalnızca bir yardımcıdır.

Yollar arasında Oturum Açma (Al, Gönder), Oturumu Kapat (Gönder), Kayıt Ol (Al, Gönder) ve Parola Sıfırlama/E-posta (Al, Gönder) yer alır.

Cephedeki yöntemi çağırdığınızda, aşağıdakileri yapar:

 public static fucntion routes(array $options = []) { if (!static::$app->providerIsLoaded(UiServiceProvider::class)) { throw new RuntimeException('In order to use the Auth:;routes() method, please install the laravel/ui package.'); } static::$app->make('router')->auth($options); }

Yönlendiricide statik yöntem çağrıldığında ne olduğuyla ilgileniyoruz. Bu, cephelerin nasıl çalıştığı gerçeğinden dolayı yanıltıcı olabilir, ancak şu şekilde adlandırılan yöntem şöyledir:

 /** Register the typical authentication routes for an application. @param array $options @return void */ public function auth(array $options = []) { // Authentication Routes... $this->get('login', 'Auth\[email protected]')->name('login'); $this->post('login', 'Auth\[email protected]'); $this->post('logout', 'Auth\[email protected]')->name('logout'); // Registration Routes... if ($options['register'] ?? true) { $this->get('register', 'Auth\[email protected]')->name('register'); $this->post('register', 'Auth\[email protected]'); } // Password Reset Routes... if ($options['reset'] ?? true) { $this->resetPassword(); } // Email Verification Routes... if ($options['verify'] ?? false) { $this->emailVerification(); } }

Varsayılan olarak, e-posta doğrulama dışındaki tüm yolları oluşturur. Her zaman Giriş ve Çıkış yollarına sahip olacağız, ancak diğerlerini seçenekler dizisi aracılığıyla kontrol edebiliriz.

Sadece giriş/çıkış ve kayıt olmak istiyorsak, aşağıdaki seçenekler dizisini geçebiliriz:

 $options = ["register" => true, "reset" => false, "verify" => false];

Rotaları ve Özel Muhafızları Koruma

Bazı rotalara yalnızca kimliği doğrulanmış kullanıcılar tarafından erişilebildiğinden ve Route cephesinde ara yazılım yöntemini çağırarak veya ara yazılım yöntemini buna zincirleyerek hızlı bir şekilde yapılabileceğinden emin olmak istiyoruz:

 Route::middleware('auth')->get('/user', function (Request $request) { return $request->user(); }); Route::get('/user', function (Request $request) { return $request->user(); })->middleware('auth');

Bu koruma, gelen isteklerin kimliğinin doğrulanmasını sağlar.

Şifre onayı

Daha fazla web sitesi güvenliği için, genellikle başka bir göreve geçmeden önce bir kullanıcının parolasını onaylamak istersiniz.

İsteği işlemek için şifreyi onayla görünümünden bir yol tanımlamalıyız. Kullanıcıyı doğrulayacak ve hedeflenen hedefe yönlendirecektir. Aynı zamanda, oturumda şifremizin onaylanmış görünmesini sağlayacağız. Varsayılan olarak, parolanın her üç saatte bir yeniden onaylanması gerekir, ancak bu , config/auth.php adresindeki yapılandırma dosyasında değiştirilebilir:

 use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Redirect; Route::post('/confirm-password', function (Request $request) { if (!Hash::check($request->password, $request->user()->password)) { return back()->withErrors([ 'password' => ['The provided password does not match our records.'] ]); } $request->session()->passwordConfirmed(); return redirect()->intended(); })->middleware(['auth']);

Doğrulanabilir Sözleşme

Illuminate\Contracts\Auth konumunda bulunan Authenticable sözleşmesi, UserProvider cephesinin neleri uygulaması gerektiğinin bir planını tanımlar:

 namespace Illuminate\Contracts\Auth; interface Authenticable { public function getAuthIdentifierName(); public function getAuthIdentifier(); public function getAuthPassord(); public function getRememberToken(); public function setRememberToken($value); public function getrememberTokenName(); }

Arayüz, kimlik doğrulama sisteminin onu uygulayan herhangi bir "kullanıcı" sınıfıyla çalışmasına izin verir.

Bu, hangi ORM veya depolama katmanlarının kullanıldığına bakılmaksızın geçerlidir. Varsayılan olarak Laravel, bu arabirimi uygulayan App\Models\User'a sahiptir ve bu, yapılandırma dosyasında da görülebilir:

 return [ 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], ], ];

Kimlik Doğrulama Olayları

Kimlik doğrulama sürecinin tamamı boyunca gönderilen çok sayıda olay vardır.

Hedeflerinize bağlı olarak, bu etkinliklere dinleyiciler ekleyebilirsiniz. EventServiceProvider .

Laravel Dinleyicileri
Kimlik doğrulama hizmetimiz için oluşturulan Laravel dinleyicilerinin listesi

Hızla Yeni Kullanıcılar Oluşturun

Hızlı bir şekilde yeni bir kullanıcı oluşturmak, App\User aracılığıyla yapılabilir:

 $user = new App\User(); $user->password = Hash::make('strong_password'); $user->email = '[email protected]'; $user->name = 'Username'; $user->save();

Veya Kullanıcı cephesinde statik oluşturma yöntemi aracılığıyla:

 User::create([ 'password' => Hash::make('strong-password'), 'email' => '[email protected]', 'name' => 'username' ]);

Özet

Laravel ekosisteminde, uygulamanızı Breeze ve Jetstream gibi bir Kimlik Doğrulama sistemiyle çalışır duruma getirmek için birçok başlangıç ​​kiti bulunur. Kod bizim tarafımızda üretildiği için son derece özelleştirilebilirler ve gerekirse bir plan olarak kullanarak onu istediğimiz kadar değiştirebiliriz.

Kimlik doğrulama ve incelikleriyle ilgili birçok güvenlik endişesi vardır, ancak bunların tümü Laravel'in sağladığı araçlarla kolayca çözülebilir. Bu araçlar son derece özelleştirilebilir ve kullanımı kolaydır.

Hızlı Laravel barındırma hizmetimizle Laravel uygulamalarınızı hızlı ve verimli bir şekilde dağıtın. Ücretsiz deneme sürümüyle uygulamanızı çalışırken görün.