Laravel'de kimlik doğrulamanın çekirdeğinde Guard sistemi var. Guard bize kimlik doğrulama işleminde hangi yapıyı kullanacağımızı seçmemizi sağlıyor. Bunlar oturum (session) ve token (stateless yapıdaki kimlik doğrulamaları için, ör. api).
Kimlik doğrulama işleminde ise bir de sağlayıcı (provider) var. Bu Guard'ı kullanacak olan kullanıcıları bize sağlayan kaynağı seçmemizi sağlıyor.. Bu kaynak da iki şekilde oluyor: eloquent:Model ya da database:table şeklinde. Yani eloquent:App\User (User modeli aracılığıyla) ya da database:users (users tablosu aracılığıyla) gibi.
Bu bilgiler config/auth.php içerisinde belirleniyor. Laravel ile standart gelen eloquent:App\User.
Kısa girişten sonra şöyle tarif edeyim:
User modelinin bir kopyasını oluşturup Admin şeklinde adını ve sınıf adını değiştirin.
Ekstra olarak Admin modelinize
protected $guard = 'admin'; şeklinde eleman ekleyeceksiniz. Bu hangi guard'ı kullanacağımızı belirliyor.
config/auth.php içerisine yeni admin isimli yeni guard'ı ekleyeceksiniz:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
Daha sonra yine config/auth.php içerisine yeni admin provider ekleyeceğiz:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
],
Daha sonra yine config/auth.php içerisine adminin şifresini sıfırlayabilmesi için passwords alanına yeni ayar ekleyeceğiz:
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
// hem users hem de admins tablosunda aynı emailin olabileceğini düşünerek buna admin_password_resets şeklinde ayrı bir tablo açıyoruz
// Bunun için yeni bir migrasyon oluşturup mevcut password_resets tablosunun migrasyonunu kullanın, aşağıda veriyorum
'admins' => [
'provider' => 'admins',
'table' => 'admin_password_resets',
'expire' => 60,
],
],
admin_password_resets için migrason
$ php artisan create_admin_password_resets_table
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateAdminPasswordResetsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('admin_password_resets', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('admin_password_resets');
}
}
Bundan sonra
Auth::guard('admin')->check()
Auth::guard('admin')->attempt($credentials);
Auth::guard('admin')->login($user);
gibi guard bazlı işlemler yapabilirsiniz. Otomatik olarak App\Admin modelini ve admins tablosunu (adının öyle olduğunu varsayıyorum) kullanacak.
auth middlewareini kullanırken de ->middleware('auth:admin') şeklinde guard seçebiliyorsunuz
Geriye LoginController'ı düzenlemek kalıyor.
Artık başlayacaksınız, takıldığınız yerde yardımcı olacağız, yazmaktan yoruldum