Tam Kullanıcı Kimlik Doğrulaması ve Erişim Kontrolü – Bir Laravel Pasaport Eğitimi, Pt. 1

Yayınlanan: 2022-03-11

Bir web uygulaması geliştirirken, onu iki katmana bölmek genellikle iyi bir fikirdir. Orta düzey bir API, veritabanı ile etkileşime girer ve bir web katmanı genellikle bir ön uç SPA veya MPA'dan oluşur. Bu şekilde, bir web uygulaması daha gevşek bir şekilde birleştirilir ve uzun vadede yönetimi ve hata ayıklamayı kolaylaştırır.

API oluşturulduğunda, kimlik doğrulama ve durum bilgisinin durum bilgisi olmayan bir API bağlamında ayarlanması biraz sorunlu görünebilir.

Bu makalede, Laravel ve Passport kullanarak bir API'de tam kullanıcı kimlik doğrulamasının ve basit bir erişim denetimi biçiminin nasıl uygulanacağına bakacağız. Bu bir giriş dersi olmadığı için Laravel ile çalışma deneyiminiz olmalıdır.

Kurulum önkoşulları:

  • PHP 7+, MySQL ve Apache (üçünü aynı anda kurmak isteyen geliştiriciler XAMPP kullanabilir.)
  • Besteci
  • laravel 7
  • Laravel Pasaportu. API'ler genellikle durum bilgisiz olduğundan ve oturum kullanmadığından, istekler arasında durumu korumak için genellikle belirteçleri kullanırız. Laravel, API'mizde kimlik doğrulama için kullanabileceğimiz tam bir OAuth2 sunucusunu uygulamak için Passport kitaplığını kullanır.
  • API'yi test etmek için Postacı, cURL veya Uykusuzluk - bu kişisel tercihe bağlıdır
  • Seçtiğiniz metin editörü
  • Laravel yardımcıları (Laravel 6.0 ve üstü için)—Laravel ve Passport'u kurduktan sonra şunu çalıştırın:
 composer require laravel/helpers

Yukarıdakiler yüklendiğinde, başlamaya hazırız. .env dosyasını düzenleyerek veritabanı bağlantınızı kurduğunuzdan emin olun.

Laravel Pasaport Eğitimi, Adım 1: Kukla İstekler için Denetleyici ve Model Ekleme

İlk olarak, kukla istekler için bir denetleyici ve model oluşturacağız. Model bu öğreticide pek kullanılmayacak, sadece denetleyicinin manipüle etmesi gereken veriler hakkında bir fikir vermek için.

Modeli ve denetleyiciyi oluşturmadan önce bir geçiş oluşturmamız gerekiyor. Bir terminalde—veya Windows kullanıyorsanız cmd.exe penceresinde— aşağıdakileri çalıştırın:

 php artisan make:migration create_articles_table --create=articles

Şimdi, database/migrations klasörüne gidin ve xxxx_xx_xx_xxxxxx_create_articles_table.php benzeri bir ada sahip dosyayı açın.

Sınıfın up fonksiyonunda şunu yazacağız:

 Schema::create('articles', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->string('body'); $table->integer('user_id'); $table->timestamps(); });

Ardından, bir Article modeli oluşturacağız. Bunu yapmak için şunu çalıştırın:

 php artisan make:model Article

Ardından, aşağıdakileri çalıştırarak ArticleController denetleyicisini oluştururuz:

 php artisan make:controller ArticleController --resource

Ardından, app/Providers/AppServiceProvider.php dosyasını düzenleyeceğiz ve aşağıdakileri ekleyerek Illuminate\Support\Facades\Schema sınıfını içe aktaracağız:

 use Illuminate\Support\Facades\Schema

…dosyanın üstündeki içe aktarmaların altına.

Ardından, boot işlevinde şunu yazacağız:

 Schema::defaultStringLength(191);

Tüm bunlar yapıldıktan sonra çalıştırabiliriz:

 php artisan migrate

…yukarıda oluşturduğumuz göçü uygulamak için.

Laravel Pasaport Eğitimi, Adım 2: Gerekli Ara Katman Parçalarını Oluşturun

Burada, API'nin çalışması için gerekli olacak ara katman parçalarını ekleyeceğiz.

JSON Yanıtları

İhtiyaç duyulan ilk parça, tüm yanıtları otomatik olarak ForceJsonResponse dönüştürecek olan ForceJsonResponse ara yazılımıdır.

Bunu yapmak için şunu çalıştırın:

 php artisan make:middleware ForceJsonResponse

Ve bu, bu ara yazılımın App/Http/Middleware/ForceJsonReponse.php içindeki tanıtıcı işlevidir:

 public function handle($request, Closure $next) { $request->headers->set('Accept', 'application/json'); return $next($request); }

Ardından, $routeMiddleware dizisindeki app/Http/Kernel.php dosyamıza ara yazılımı ekleyeceğiz:

 'json.response' => \App\Http\Middleware\ForceJsonResponse::class,

Ardından, aynı dosyadaki $middleware dizisine de ekleyeceğiz:

 \App\Http\Middleware\ForceJsonResponse::class,

Bu, ForceJsonResponse ara yazılımının her istekte çalıştırılmasını sağlar.

CORS (Çapraz Kaynaklı Kaynak Paylaşımı)

Laravel REST API'mizin tüketicilerinin ona farklı bir kaynaktan erişmesine izin vermek için CORS kurmamız gerekiyor. Bunu yapmak için Cors adında bir ara katman yazılımı oluşturacağız.

Bir terminalde veya komut isteminde, proje kök dizinine cd girin ve şunu çalıştırın:

 php artisan make:middleware Cors

Ardından, app/Http/Middleware/Cors.php içinde aşağıdaki kodu ekleyin:

 public function handle($request, Closure $next) { return $next($request) ->header('Access-Control-Allow-Origin', '*') ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') ->header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, X-Token-Auth, Authorization'); }

Bu ara katman yazılımını yüklemek için app/Http/Kernel.php $routeMiddleware dizisine bir satır eklememiz gerekecek:

 'cors' => \App\Http\Middleware\Cors::class,

Ayrıca, önceki ara katman yazılımı için yaptığımız gibi onu $middleware dizisine eklememiz gerekecek:

 \App\Http\Middleware\Cors::class,

Bunu yaptıktan sonra, bu rota grubunu routes/api.php :

 Route::group(['middleware' => ['cors', 'json.response']], function () { // ... });

Aşağıda göreceğimiz gibi, tüm API rotalarımız bu işleve girecektir.

Laravel Pasaport Eğitimi, Adım 3: API için Kullanıcı Kimlik Doğrulama Denetleyicileri Oluşturun

Şimdi, login ve register işlevleriyle kimlik doğrulama denetleyicisini oluşturmak istiyoruz.

İlk önce çalıştıracağız:

 php artisan make:controller Auth/ApiAuthController

Şimdi bazı sınıfları app/Http/Controllers/Auth/ApiAuthController.php dosyasına aktaracağız. Bu sınıflar login ve register fonksiyonlarının oluşturulmasında kullanılacaktır. Aşağıdakileri ekleyerek sınıfları içe aktaracağız:

 use App\User; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use Illuminate\Support\Str;

…denetleyicinin en üstüne.

Şimdi, kullanıcılarımız için Laravel API kimlik doğrulaması eklemek için, aynı dosyada login , logout ve register (signup) fonksiyonlarını oluşturacağız.

register işlevi şöyle görünecektir:

 public function register (Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:6|confirmed', ]); if ($validator->fails()) { return response(['errors'=>$validator->errors()->all()], 422); } $request['password']=Hash::make($request['password']); $request['remember_token'] = Str::random(10); $user = User::create($request->toArray()); $token = $user->createToken('Laravel Password Grant Client')->accessToken; $response = ['token' => $token]; return response($response, 200); }

login işlevi şu şekildedir:

 public function login (Request $request) { $validator = Validator::make($request->all(), [ 'email' => 'required|string|email|max:255', 'password' => 'required|string|min:6|confirmed', ]); if ($validator->fails()) { return response(['errors'=>$validator->errors()->all()], 422); } $user = User::where('email', $request->email)->first(); if ($user) { if (Hash::check($request->password, $user->password)) { $token = $user->createToken('Laravel Password Grant Client')->accessToken; $response = ['token' => $token]; return response($response, 200); } else { $response = ["message" => "Password mismatch"]; return response($response, 422); } } else { $response = ["message" =>'User does not exist']; return response($response, 422); } }

Ve son olarak, logout işlevi:

 public function logout (Request $request) { $token = $request->user()->token(); $token->revoke(); $response = ['message' => 'You have been successfully logged out!']; return response($response, 200); }

Bundan sonra, rotalarımıza, yani zaten API'de bulunan rota grubu içinde login , register ve logout fonksiyonlarını eklememiz gerekiyor:

 Route::group(['middleware' => ['cors', 'json.response']], function () { // ... // public routes Route::post('/login', 'Auth\ApiAuthController@login')->name('login.api'); Route::post('/register','Auth\ApiAuthController@register')->name('register.api'); Route::post('/logout', 'Auth\ApiAuthController@logout')->name('logout.api'); // ... });

Son olarak HasApiToken özelliğini User modeline eklememiz gerekiyor. app/User gidin ve şunlara sahip olduğunuzdan emin olun:

 use HasApiTokens, Notifiable;

…sınıfın en üstünde.

Şimdiye Kadar Sahip olduklarımız…

Uygulama sunucusunu başlatırsak, yani php artisan serve çalıştırırsak ve ardından /api/user yoluna bir GET isteği göndermeyi denersek, şu mesajı almalıyız:

 { "message": "Unauthenticated." }

Bunun nedeni, bu rotaya erişmek için kimliğimizin doğrulanmamasıdır. Seçtiğiniz bazı rotaları korumalı hale getirmek için, onları Route::post satırlarından hemen sonra routes/api.php ekleyebiliriz:

 Route::middleware('auth:api')->group(function () { // our routes to be protected will go in here });

Devam etmeden önce, oturum kapatma yolunu auth:api ara yazılımına ekleyeceğiz çünkü Laravel, kullanıcının oturumunu kapatmak için bir belirteç ( auth:api ara yazılımının dışından erişilemeyen bir belirteç) kullanır. Genel rotalarımız şöyle görünür:

 Route::group(['middleware' => ['cors', 'json.response']], function () { // ... // public routes Route::post('/login', 'Auth\ApiAuthController@login')->name('login.api'); Route::post('/register', 'Auth\ApiAuthController@register')->name('register.api'); // ... });

Korunan rotalarımız ise şöyle görünür:

 Route::middleware('auth:api')->group(function () { // our routes to be protected will go in here Route::post('/logout', 'Auth\ApiAuthController@logout')->name('logout.api'); });

Şimdi app/Http/Controllers/ArticleController.php içinde oluşturduğumuz ArticleController gideceğiz ve o sınıftaki create ve edit metodlarını sileceğiz. Bundan sonra, kalan her bir işleve biraz düzenlenmiş aşağıdaki kod parçasını ekleyeceğiz:

 $response = ['message' => '<function name> function']; return response($response, 200);

<function name> alanını uygun şekilde dolduracağız. Örneğin, update işlevinin gövdesi şu şekilde olacaktır:

 $response = ['message' => 'update function']; return response($response, 200);

Manuel Laravel Kimlik Doğrulama Testi: Bir Kullanıcı Oluşturma

Bir kullanıcıyı kaydetmek için, /api/register şu parametrelerle bir POST isteği göndereceğiz: name , email (benzersiz olması gerekir), password ve password_confirmation .

/api/register'a Postman kullanarak POST isteği göndermenin ekran görüntüsü.

Kullanıcı oluşturulduğunda, API, kimlik doğrulama yöntemimiz olarak daha sonraki isteklerde kullanacağımız bir belirteç döndürür.

Giriş yapmak için /api/login adresine bir POST isteği göndereceğiz. Kimlik bilgilerimiz doğruysa, bu şekilde Laravel oturum açma API'mizden de bir jeton alırız.

Postman kullanarak /api/login'e POST isteği göndermenin ekran görüntüsü.

Bu istekten döndürülen yetkilendirme jetonu, korumalı bir rotaya erişmek istediğimizde kullanabiliriz. Postacı'da, "Yetkilendirme" sekmesinde, türün "Taşıyıcı Simgesi" olarak ayarlanabileceği bir açılır menü bulunur ve ardından simge, simge alanına gidebilir.

Süreç Insomnia'da oldukça benzer.

cURL kullanıcıları, -H "Authorization: Bearer <token>" parametresini ileterek eşdeğerini yapabilir; burada <token> , oturum açma veya kayıt yanıtından verilen yetkilendirme simgesidir.

cURL'de olduğu gibi, geliştiriciler API'yi axios veya bu tür bir kitaplık kullanarak kullanmayı planlıyorlarsa, Bearer <token> değerine sahip bir Authorization başlığı ekleyebilirler.

Laravel Pasaport Eğitimi, Adım 4: Parola Sıfırlama İşlevselliği Oluşturun

Artık temel kimlik doğrulaması yapıldığına göre, bir parola sıfırlama işlevi kurmanın zamanı geldi.

Bunu yapmak için bir api_auth denetleyici dizini oluşturmayı, yeni özel denetleyiciler oluşturmayı ve işlevi gerçekleştirmeyi seçebiliriz; veya Laravel ile oluşturabileceğimiz auth controller'ları düzenleyebiliriz. Bu durumda, tüm uygulama bir API olduğundan, yetkilendirme denetleyicilerini düzenleyeceğiz.

İlk olarak, aşağıdakileri çalıştırarak auth denetleyicilerini oluşturacağız:

 composer require laravel/ui php artisan ui vue --auth

Bu iki yöntemi ekleyerek app/Http/Controllers/Auth/ForgotPasswordController.php içindeki sınıfı düzenleyeceğiz:

 protected function sendResetLinkResponse(Request $request, $response) { $response = ['message' => "Password reset email sent"]; return response($response, 200); } protected function sendResetLinkFailedResponse(Request $request, $response) { $response = "Email could not be sent to this email address"; return response($response, 500); }

Ardından, parolayı gerçekten sıfırlayan denetleyiciyi kurmamız gerekiyor, bu nedenle app/Http/Controllers/Auth/ResetPasswordController.php gidip aşağıdaki gibi varsayılan işlevleri geçersiz kılacağız:

 protected function resetPassword($user, $password) { $user->password = Hash::make($password); $user->save(); event(new PasswordReset($user)); } protected function sendResetResponse(Request $request, $response) { $response = ['message' => "Password reset successful"]; return response($response, 200); } protected function sendResetFailedResponse(Request $request, $response) { $response = "Token Invalid"; return response($response, 401); }

Ayrıca aşağıdakileri ekleyerek denetleyicideki bazı sınıfları içe aktarmamız gerekiyor:

 use Illuminate\Auth\Events\PasswordReset; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash;

…denetleyicinin en üstüne.

Laravel ile birlikte gelen posta bildirimi yetkilendirme için API belirteçlerini kullanmadığından, hangi e-posta bildiriminin kullanıldığını da değiştirmek isteyeceğiz. Bu komutu çalıştırarak app/Notifications altında yeni bir tane oluşturabiliriz:

 php artisan make:notification MailResetPasswordNotification

Şu şekilde görünmesi için app/Notifications/MailResetPasswordNotification.php dosyasını düzenlememiz gerekecek:

 <?php namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Auth\Notifications\ResetPassword; use Illuminate\Support\Facades\Lang; class MailResetPasswordNotification extends ResetPassword { use Queueable; protected $pageUrl; public $token; /** * Create a new notification instance. * * @param $token */ public function __construct($token) { parent::__construct($token); $this->pageUrl = 'localhost:8080'; // we can set whatever we want here, or use .env to set environmental variables } /** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array */ public function via($notifiable) { return ['mail']; } /** * Get the mail representation of the notification. * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable) { if (static::$toMailCallback) { return call_user_func(static::$toMailCallback, $notifiable, $this->token); } return (new MailMessage) ->subject(Lang::getFromJson('Reset application Password')) ->line(Lang::getFromJson('You are receiving this email because we received a password reset request for your account.')) ->action(Lang::getFromJson('Reset Password'), $this->pageUrl."?token=".$this->token) ->line(Lang::getFromJson('This password reset link will expire in :count minutes.', ['count' => config('auth.passwords.users.expire')])) ->line(Lang::getFromJson('If you did not request a password reset, no further action is required.')); } /** * Get the array representation of the notification. * * @param mixed $notifiable * @return array */ public function toArray($notifiable) { return [ // ]; } }

Bu yeni bildirimi kullanmak için, User Authenticatable sınıfından miras aldığı sendPasswordResetNotification yöntemini geçersiz kılmamız gerekiyor. Tek yapmamız gereken bunu app/User.php eklemek:

 public function sendPasswordResetNotification($token) { $this->notify(new \App\Notifications\MailResetPasswordNotification($token)); }

Düzgün çalışan bir mail kurulumu ile bu noktada bildirimler çalışıyor olmalıdır.

Artık geriye kalan tek şey kullanıcı erişim kontrolü.

Laravel Pasaport Eğitimi, Adım 5: Erişim Kontrolü Ara Yazılımı Oluşturun

Erişim kontrolü ara yazılımı oluşturmadan önce, kullanıcı seviyesini belirlemek için kullanılacak olan type adında bir sütuna sahip olacak şekilde user tablosunu güncellememiz gerekecek: type 0 normal bir kullanıcı, type 1 bir admin ve type 2 bir süper yönetici.

user tablosunu güncellemek için şunu çalıştırarak bir taşıma oluşturmalıyız:

 php artisan make:migration update_users_table_to_include_type --table=users

database/migrations/[timestamp]_update_users_table.php formunun yeni oluşturulan dosyasında, type sütununu eklemek ve kaldırmak için sırasıyla up ve down işlevlerini güncellememiz gerekecek:

 public function up() { Schema::table('users', function (Blueprint $table) { $table->integer('type'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('users', function (Blueprint $table) { $table->dropIfExists('type'); }); }

Ardından, php artisan migrate çalıştıracağız. Bu yapıldıktan sonra, ApiAuthController.php dosyasındaki register fonksiyonumuzu düzenlememiz ve bunu satırın hemen önüne $user = User::create($request->toArray()); ile eklememiz gerekiyor. :

 $request['type'] = $request['type'] ? $request['type'] : 0;

Ayrıca, bu satırı $validator dizisine eklememiz gerekecek:

 'type' => 'integer',

Bu iki düzenlemeden ilki, tüm kayıtlı kullanıcıları varsayılan olarak "normal kullanıcılar" yapacaktır, yani herhangi bir kullanıcı türü girilmediyse.

Erişim Kontrolü Ara Yazılımının Kendisi

Şimdi, erişim kontrolü için kullanmak üzere iki parça ara katman yazılımı oluşturabilecek durumdayız: biri yöneticiler için diğeri süper yöneticiler için.

Bu yüzden koşacağız:

 php artisan make:middleware AdminAuth php artisan make:middleware SuperAdminAuth

İlk önce app/Http/Middleware/AdminAuth.php ve Illuminate\Support\Facades\Auth dosyasını içe aktaracağız, ardından handle işlevini şu şekilde düzenleyeceğiz:

 public function handle($request, Closure $next) { if (Auth::guard('api')->check() && $request->user()->type >= 1) { return $next($request); } else { $message = ["message" => "Permission Denied"]; return response($message, 401); } }

Ayrıca app/Http/Middleware/SuperAdminAuth.php içindeki handle işlevini düzenlememiz gerekecek:

 public function handle($request, Closure $next) { if (Auth::guard('api')->check() && $request->user()->type >= 2) { return $next($request); } else { $message = ["message" => "Permission Denied"]; return response($message, 401); } }

Ayrıca aşağıdakileri ekleyerek her iki dosyanın en üstündeki Auth sınıfını içe aktarmalısınız:

 use Illuminate\Support\Facades\Auth;

… orada bulunan ithalatın dibine.

Yeni ara katman yazılımımızı kullanmak için, $routeMiddleware dizisine aşağıdaki satırları ekleyerek, çekirdekteki her iki sınıfa da (yani app/Http/Kernel.php ) başvuracağız:

 'api.admin' => \App\Http\Middleware\AdminAuth::class, 'api.superAdmin' => \App\Http\Middleware\SuperAdminAuth::class,

Geliştiriciler belirli bir rotada ara yazılımı kullanmak isterse, tek yapmanız gereken onu rota işlevine şu şekilde eklemektir:

 Route::post('route','Controller@method')->middleware('<middleware-name-here>');

Bu durumda <middleware-name-here> uygun şekilde api.admin , api.superAdmin vb. olabilir.

Ara katman yazılımımızı oluşturmak için gereken tek şey bu.

Hepsini bir araya koy

Kimlik doğrulama ve erişim kontrolümüzün çalıştığını test etmek için atılması gereken bazı ek adımlar vardır.

Laravel Kimlik Doğrulaması ve Erişim Kontrolünün Test Edilmesi: Adım 1

ArticleController index fonksiyonunu değiştirmemiz ve rotayı kaydetmemiz gerekiyor. (Gerçek dünya projelerinde PHPUnit kullanır ve bunu otomatik bir testin parçası olarak yapardık. Burada, test amacıyla manuel olarak bir rota ekliyoruz - daha sonra kaldırılabilir.)

app/Http/Controllers/ArticleController adresindeki ArticleController kontrolörüne gideceğiz ve index fonksiyonunu şöyle görünecek şekilde değiştireceğiz:

 public function index() { $response = ['message' => 'article index']; return response($response, 200); }

Ardından, route routes/api.php dosyasına gidip şunu ekleyerek bir route'a fonksiyonu kaydedeceğiz:

 Route::middleware('auth:api')->group(function () { Route::get('/articles', 'ArticleController@index')->name('articles'); });

Laravel Kimlik Doğrulaması ve Erişim Kontrolünün Test Edilmesi: 2. Adım

Artık bir kimlik doğrulama belirteci olmadan rotaya erişmeyi deneyebiliriz. Bir kimlik doğrulama hatası almalıyız.

/api/articles'a Postman kullanarak bir GET isteği göndermenin ve yanıt olarak "Kimliği Doğrulanmadı" iletisinin alınmasının ekran görüntüsü.

Laravel Kimlik Doğrulaması ve Erişim Kontrolünün Test Edilmesi: Adım 3

Aynı rotaya bir yetkilendirme jetonuyla da erişmeyi deneyebiliriz (bu makalenin önceki bölümlerinde kaydolurken veya oturum açarken elde ettiğimiz).

Bazen bu, şuna benzer bir hataya neden olabilir:

 Unknown column 'api_token' in 'where clause' (SQL: select * from `users` where `api_token` = ... 

Postman kullanarak API/makaleler yolunu GETting'den gelen bilinmeyen sütun hatasının ekran görüntüsü.

Bu olursa, geliştiricilerin bir Passport geçişi çalıştırdıklarından ve config/auth.php ['guards']['api']['driver'] öğesinin passport olarak ayarlandığından emin olmaları gerekir:

 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],

Bundan sonra, yapılandırma önbelleğinin de güncellenmesi gerekiyor.

Bu düzeltildikten sonra, rotaya erişebiliriz.

Normal bir JSON yanıtıyla Postman kullanarak /api/articles öğesine bir GET isteği göndermenin ekran görüntüsü.

Laravel Kimlik Doğrulaması ve Erişim Kontrolünün Test Edilmesi: Adım 4

Erişim kontrolünü test etme zamanı. Makaleler yoluna ->middleware('api.admin') , böylece şöyle görünür:

 Route::get('/articles', 'ArticleController@index')->middleware('api.admin')->name('articles');

api/user yolu üzerinden görebileceğimiz gibi, yeni oluşturulan bir kullanıcıya otomatik olarak 0 tipi atanacak şekilde yaptık.

/api/user'a Postman kullanarak bir GET isteği göndermenin ekran görüntüsü. Yanıt bir kimlik, ad, e-posta, boş e-posta doğrulama zaman damgası, doldurulmuş oluşturulmuş ve güncellenmiş zaman damgaları ve bir tür içerir.

Bu nedenle, böyle bir kullanıcı olarak articles uç noktasına erişmeye çalışırken bir hata almalıyız.

İzin Reddedildi JSON yanıtıyla Postman kullanarak /api/articles öğesine GET isteği göndermenin ekran görüntüsü.

Test amacıyla, veritabanındaki kullanıcıyı type 1 olacak şekilde değiştirelim. Bu değişikliği api/user yolu ile tekrar doğruladıktan sonra, /articles/ rotasını GET için tekrar denemeye hazırız.

/api/articles'a Postman kullanan Laravel kimliği doğrulanmış bir kullanıcı olarak bir GET isteği göndermenin ekran görüntüsü, bunun yanıt süresinin 890 ms yerine 1.280 ms olması dışında, önceki bir istekle aynıdır.

Mükemmel çalışıyor.

Daha karmaşık uygulamalar yapan geliştiriciler, uygun erişim kontrollerinin bu kadar basit olmayacağını unutmamalıdır. Bu durumda, özel kullanıcı erişim kontrolünü uygulamak için diğer üçüncü taraf uygulamaları veya Laravel'in kapıları ve ilkeleri kullanılabilir. Bu serinin ikinci bölümünde, daha sağlam ve esnek erişim kontrol çözümlerine bakacağız.

Laravel API Kimlik Doğrulaması: Ne Öğrendik?

Bu Laravel Pasaport eğitiminde şunları tartıştık:

  1. Laravel Pasaport örneğimizi test ederken kullanılacak bir şeye sahip olmak için kukla bir denetleyici ve model oluşturmak.
  2. API'mizin sorunsuz çalışmasını sağlamak için gerekli ara yazılımı oluşturmak, CORS'u adreslemek ve API'yi her zaman JSON yanıtları döndürmeye zorlamak.
  3. Temel Laravel API kimlik doğrulamasının ayarlanması: kaydolma, oturum açma ve oturum kapatma.
  4. Laravel'in varsayılanına dayalı olarak “parola sıfırlama” işlevinin ayarlanması.
  5. Farklı rotalara kullanıcı yetkilendirme izin düzeyleri eklemek için erişim denetimi ara yazılımı oluşturma.

Bunlar, Laravel geliştirme hizmetleri alanında çalışan herkes için temel becerilerdir. Okuyucular bu GitHub deposunda nihai sonucu bulacaklar ve artık Laravel ile kimlik doğrulamayı uygulamak için iyi bir konumda olmalıdırlar. Aşağıda yorumları bekliyoruz.