Laravel Kimlik Doğrulaması İçin Kapsamlı Bir Kılavuz
Yayınlanan: 2023-03-23Kimlik 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.
Ş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:
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:
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:
- twitter (OAuth 1.0 için)
- twitter-oauth-2 (OAuth 2.0 için)
- 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
.
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.