آموزش ایجاد  احرز هویت(Authentication)  چندگانه در لاراول با استفاده از Guards

آموزش ایجاد احرز هویت(Authentication) چندگانه در لاراول با استفاده از Guards

Guard (نگهبان) یک روش برای شناسی کاربران تایید شده می باشد که از لاراول ۵.۲ به بعد به این فریم وورک افزوده شده است. لاراول گاردهای متفاوتی همچون کوکی ها و سشن ها فراهم می کند. Guard سشن وضعیت کاربر را در هر درخواست درون کوکی ها نگه می دارد و این یک گارد token با استفاده از یک توکن وضعیت کاربر را در هر درخواست بررسی می کند

همانطور که می دانید از نسخه ۵.۲ به بعد قابلیتی بنام gaurd را به لاراول افزوده شده است. در نسخه های قبلی سیستم احراز هویت لاراول با استفاده از درخواست هایی که با استفاده از متد پست به کنترلر مورد نظر ارسال می شد بررسی و در صورت احراز هویت برای کاربر سشن ایجاد می شد و در غیر اینصورت برگشت داده میشد. در نسخه های قبل از ۵.۲ برای ایجاد یک API کار بسیار مشکل بود و شما باید چندین درایور ایجاد می کردید. اما از نسخه ۵.۲ به بعد لاراول کار را بسیار برای ما ساده کرده است و ما می توانیم با استفاده از گارد Gurad درایور درایور های متفاوتی را برای استفاده ایجاد نماییم.

شما می توانید برای مشاهده guard ها به فایل  config/auth.php‌ بروید.

اما Guard چیست؟ 

Guard (نگهبان) یک روش برای شناسی کاربران تایید شده می باشد که از لاراول ۵.۲ به بعد به این فریم وورک افزوده شده است. 

لاراول گاردهای متفاوتی همچون کوکی ها و سشن ها فراهم می کند. Guard سشن وضعیت کاربر را در هر درخواست درون کوکی ها نگه می دارد و این یک گارد token با استفاده از یک توکن وضعیت کاربر را در هر درخواست بررسی می کند

 

Providers چیست؟

بصورت معمول Providers مسیولیت بازیابی اطلاعات در اپلیکیشن را برعهده دارد.

اگر یک گارد نیاز به احراز هویت یک کاربر داشت. این عمل به authentication provider خواهد رفت. سپس با توجه به provider ی که مشخص شده است کار احراز هویت کاربر انجام خواهد شد.

 

آموزش ایجاد Multiple Authentication در لاراول

لاراول خود را ایجاد و به دیتابیس متصل کرده و سپس دستوات  زیر را در خط فرمان اجرا نمایید:

php artisan make:auth

سپس:

php artisan migrate

 

حال با استفاده از دستور زیر مدل و مایگریشن مربوط به admin خود را بسازید:

php artisan make:model Models/Admins -m

دستور بالا فایل مایگریت و مدل Admins را در پوشه ی Models ایجاد خواهد کرد. حال به پوشه ی Models رفته و کدهای زیر را جایگزین کدهای درون فایل Admins.php کنید:

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;

class Admins extends Authenticatable
 {

protected $guard = 'admin';

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
 protected $fillable = [
 'firstname', 'midname', 'lastname', 'email', 'address', 'password',
 ];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
 protected $hidden = [
 'password', 'remember_token',
 ];
 }

در ادامه به دایرکتوری database و سپس به ادرس migrations\_create_admins_table.php رفته و کدهای درون آن را با کدهای زیر جایگزین کنید:

<?php

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

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

/**
 * Reverse the migrations.
 *
 * @return void
 */
 public function down()
 {
 Schema::dropIfExists('admins');
 }

 

حالا دستور php artisan migrate را در خط فرمان اجرا نمایید.

اکنون به فایل config/auth.php  بروید تا تنظیمات مربوط به گارد admins را انجام دهیم.

آرایه gaurds و providers  درون این فایل را بصورت زیر تغییر دهید:

'guards' => [

    'web' => [

        'driver' => 'session',

        'provider' => 'users',

    ],

'api' => [
 'driver' => 'token',
 'provider' => 'users',
 ],

'admin' => [
 'driver' => 'session',
 'provider' => 'admins',
 ],
 'admin-api' => [
 'driver' => 'token',
 'provider' => 'admins',
 ],
 ],

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

'admins' => [
 'driver' => 'eloquent',
 'model' => App\Models\Admin::class,
 ],

],

ما در اینجا یک گارد admin-api نیز تعریف کرده ایم که درایور آن توکن می باشد همچنین یک گارد admin داریم که از درایو توکن استفاده می کند.  که سرویس دهنده یا provider این دو admins نام دارد. سپس در بخش مربوط به providers، سرویس مربوط به admins  و users را معرفی کردیم. 

 

D-  ایجاد فایل کنترلر لاگین ادمین:

برای ایجاد یک فایل login برای admin دستور زیر را در خط فرمان بنویسید:

php artisan make:controller Auth/AdminLoginController

دستور بالا یک فایل بنام AdminLoginController.php در پوشه ی Auth ایجاد خواهد کرد. این فایل را باز کنید و کدهای آن را با کدهای زیر جایگزین کنید:

<?php

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;
 use App\Http\Controllers\Controller;
 use Auth;
 use Route;

class AdminLoginController extends Controller
 {

public function __construct()
 {
 $this->middleware('guest:admin', ['except' => ['logout']]);
 }

public function showLoginForm()
 {
 return view('auth.admin_login');
 }

public function login(Request $request)
 {
 // Validate the form data
 $this->validate($request, [
 'email' => 'required|email',
 'password' => 'required|min:6'
 ]);

// Attempt to log the user in
 if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
 // if successful, then redirect to their intended location
 return redirect()->intended(route('admin.dashboard'));
 }
 // if unsuccessful, then redirect back to the login with the form data
 return redirect()->back()->withInput($request->only('email', 'remember'));
 }

public function logout()
 {
 Auth::guard('admin')->logout();
 return redirect('/admin');
 }
 }

 

حال با دستور زیر فایل AdminController را ایجاد میکنیم:

php artisan make:controller AdminController

 

فایل AdminController.php را باز و کدهای آن را با کدهای زیر جایگزین کنید:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AdminController extends Controller

{

    /**

     * Create a new controller instance.

     *

     * @return void

     */

    public function __construct()

    {

        $this->middleware('auth:admin');

    }

    /**

     * show dashboard.

     *

     * @return \Illuminate\Http\Response

     */

    public function index()

    {

        return view('admin');

    }

}

حال فایل روت پروژه خود را باز کنید و دستورات زیر را جایگزین کنید:

Route::prefix('admin')->group(function() {

   		Route::get('/login',

   		'Auth\AdminLoginController@showLoginForm')->name('admin.login');

   		Route::post('/login', 'Auth\AdminLoginController@login')->name('admin.login.submit');

   		Route::get('logout/', 'Auth\AdminLoginController@logout')->name('admin.logout');

    		Route::get('/', 'AdminController@index')->name('admin.dashboard');

  	});

در نهایت می توانید با دستورات زیر به هرکدام از روت های admin یا user دسترسی داشته باشید:

Admin Login URL: http://localhost/admin/login

User Login URL: http://localhost/login

 

توجه: برای نمایش فرم لاگین admin باید همانطور که در مرحله معرفی کرده ایم یک فایل بنام admin_login در پوشه ی auth ایجاد نمایید.

 

درصورتی که سوالی دارید از بخش نظرات برای ما ارسال نمایید.


ارسال نظر

برای اطلاع از پاسخ به نظر شما می توانید ایمیل یا شماره موبایل خود را وارد نمایید. *

ایمیل و شماره موبایل شما کاملا مخفی خواهد ماند و در سایت نمایش داده نخواهد شد. *

اگر نظری برای این مطلب ارسال شد از طریق ایمیل مرا اطلاع بده!
لسیت نظرات
هنوز برای این مطلب نظری ارسال نشده است!