• Uyarı

thread_prefix.5 Laravel 6 Çoklu Kimlik Doğrulama Eğitimi ve Kod Örneği

#1
Bu eğitimde size açık bir şekilde göstereceğim ve laravel 6'da adım adım çoklu kimlik doğrulamasının nasıl yapılacağına dair kod örneği vereceğim. Bu öğreticinin ardından, laravel 5.5,5.6,5.7 ve 5.8 için çoklu kimlik doğrulama da yapabilirsiniz.

Çalışma Planı
Bu eğitimde, 2 kullanıcı grubu, normal kullanıcı ve yönetici için kimlik doğrulama sistemini yapacağız. Normal kullanıcı için varsayılan kimlik doğrulama dağılımını kullanıyoruz ve yönetici için bazı şeyler ve değişiklikler yapmalıyız.


Laravel 6 Çoklu Kimlik Doğrulama Adımlarına Genel Bakış
1. Adım: Laravel 6'yı kurun
2. Adım: Laravel UI'yi kurun
3. Adım: Veritabanı Yapılandırması
4. Adım: Migration
5. Adım: Model Kurulumu
6. Adım: auth.php yapılandırmasını kurun
7. Adım: Route Tanımlama
8. Adım: Yönetici Kimlik Doğrulama Denetleyicisi
9. Adım: Yönetici Giriş Formu
10. Adım: Yetkisiz Yöneticinin Yeniden Yönlendirmesini İşleyin

1. Adım: Laravel 6'yı kurun
Laravel 6'yı bu komutla kurun. Aynı şeyi Laravel> 5.5 sürümünde de yapabilirsiniz.
Kod:
composer create-project --prefer-dist laravel/laravel project-name
2. Adım: Laravel UI'yi kurun

Laravel 6'da varsayılan olarak, make: auth komutu mevcut değildir. Yetkilendirme iskelesi oluşturmak için bir laravel: ui paketi kurmanız gerekir. Bunu yalnızca laravel 6 sürümünü kullanıyorsanız yapın.
Kod:
composer require laravel/ui --dev
Kod:
php artisan ui bootstrap --auth
3. Adım: Veritabanı Yapılandırması
Kod:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=dbname
DB_USERNAME=root
DB_PASSWORD=
4. Adım: Migration

2014_10_12_000000_create_admins_table.php adıyla kullanıcı migration dosyasının bir kopyasını oluşturun.
Kod:
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateAdminsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('admins', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('admins');
    }
}
Dosyayı kaydedin ve migration ı çalıştırın.
Kod:
php artisan migrate
5. Adım: Model Kurulumu
Bir yönetici modeli oluşturun. Burada kullanıcı modelini kopyaladık ve bazı değişiklikler yaptık.
Kod:
<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;


class Admin  extends Authenticatable
{
    use Notifiable;

    protected $guard = 'admin';

    protected $fillable = [
        'name', 'email', 'username', 'password','email_verfied_at'
    ];

    protected $hidden = ['password'];


}

Bu yönetici modelinde, auth.php yapılandırma dosyasında yapılandıracağımız $quard='admin' ayarladık.

6. Adım: auth.php yapılandırmasını kurun

Korumalar bölümünde yönetici için yeni koruma ekleyin.
Kod:
'guards' => [
  ...
  ...
  'admin' => [
     'driver' => 'session',
     'provider' => 'admins',
  ]
];
Yönetici koruma sağlayıcısı için sağlayıcılar bölümüne yeni sağlayıcı ekleyin.
Kod:
'providers' => [
  ...
  ...
  'admins' => [
     'driver' => 'eloquent',
     'model' => App\Admin::class,
  ]
];
7. Adım: Route Tanımlama
Kod:
Route::namespace('Admin')->name('admin.')->prefix('admin')->group(function () {
    Route::get('login', 'AdminAuthController@getLogin')->name('login');
    Route::post('login', 'AdminAuthController@postLogin');
})
8. Adım: Yönetici Kimlik Doğrulama Denetleyicisi
Ayrı bir yönetici klasörüyle yönetici kimlik doğrulaması için bir controller yapalım. Böylece yönetici ile ilgili controllerlar aynı ad alanında olacak.
Kod:
<?php

namespace App\Http\Controllers\Admin;

use App\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Str;

class AdminAuthController extends Controller
{
    use AuthenticatesUsers;

    protected $guardName = 'admin';
    protected $maxAttempts = 3;
    protected $decayMinutes = 2;

    protected $loginRoute;

    public function __construct()
    {
        $this->middleware('guest:admin')->except('postLogout');
        $this->loginRoute = route('admin.login');
    }

    public function getLogin()
    {
        return view('admin.login');
    }

    public function postLogout()
    {
        Auth::guard($this->guardName)->logout();
        Session::flush();
        return redirect()->guest($this->loginRoute);
    }

    public function postLogin(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|email',
            'password' => 'required|min:5'
        ]);

        if ($this->hasTooManyLoginAttempts($request)) {
            $this->fireLockoutEvent($request);
            $this->sendLockoutResponse($request);
        }

        $credential = [
            'email' => $request->input('email'),
            'password' => $request->input('password')
        ];

      
        if (Auth::guard($this->guardName)->attempt($credential)) {

            $request->session()->regenerate();
            $this->clearLoginAttempts($request);
            return redirect()->intended();

        } else {
            $this->incrementLoginAttempts($request);

            return redirect()->back()
                ->withInput()
                ->withErrors(["Incorrect user login details!"]);
        }
    }


}
9. Adım: Yönetici Giriş Formu

Burada sadece minimal tasarıma sahip giriş formunu gösteriyorum. İstenilen tasarımınızı değiştirebilirsiniz. Bir giriş oluşturun. kaynaklar / admin klasöründeki blade.php dosyası.
Kod:
<form method="POST" action="" method="POST">
        @csrf
        <div class="form-group">
            <p>Email</p>
            <input class="form-control" name="email" type="email" required value="">
        </div>

        <div class="form-group">
            <p>Password</p>
            <input class="form-control" name="password" type="password" required>
        </div>
        <div class="form-group">
            <button class="btn btn-primary" type="submit">Login</button>
        </div>
</form>
10. Adım: Yetkisiz Yöneticinin Yeniden Yönlendirmesini İşleyin

Herhangi biri yönetici olarak oturum açmadan yönetici yollarına erişmeye çalışırsa, o zaman varsayılan olarak kullanıcı oturum açmasına yönlendirecektir, ancak amacımız yönetici oturum açma Yolumuz için istenen Yönteme yönlendirmek olacaktır. Bunu yapmak için app / Exceptions / Handler.php'deki kimlik doğrulaması yapılmamış yöntemi değiştirmeliyiz.
Kod:
protected function unauthenticated($request, AuthenticationException $exception)
{
        if ($request->expectsJson()) {
            return response()->json(['error' => 'Unauthenticated.'], 401);
        }

        $guard = Arr::get($exception->guards(), 0);
        switch ($guard) {
            case 'admin':
                $login = 'admin/login';
                break;
            default:
                $login = 'login';
                break;
        }
        return redirect()->guest(url($login));
}

İstenilen çoklu kimlik doğrulama sistemimiz kullanıma hazırdır.

Kod:
Route::middleware('auth:admin')->group(function(){
  //here all your admin routes

})

Controller tarafından :
Kod:
public function __construct()
{
   $this->middleware('auth:admin');
}
 
Moderatör tarafında düzenlendi: