آموزش ساخت سیستم احراز هویت چندگانه در لاراول ۸

آموزش ساخت سیستم احراز هویت چندگانه در لاراول ۸

بروزرسانی : 6 ماه پیش

 

آموزش احراز هویت یا Authentication در لاراول 8

در این آموزش قصد داریم نحوه ی ایجاد سیستم احراز هویت یا Authentication در لاراول 8 را آموزش دهیم و به همراه مثال واقعی و عملی به همراه کدهای اماده شما را راهنمایی کنیم. نوع احراز هویت که در این آموزش تدریس میشود Multi auth در لاراول میباشد.

آموزش authentication یا احراز هویت چندگانه با لاراول 8

در این پست آموزشی بصورت قدم به قدم نحوه ی ایجاد سیستم احراز هویت لاراول 8 یا ثبت نام و ورود در لاراول 8 را انجام دهیم که در نهایت فرمی برای ثبت نام کاربران در لاراول و فرمی برای ورود در لاراول داشته باشیم.

قبلتر آموزش های زیادی در زمینه ی آموزش احراز هویت در لاراول منتشر کردیم اما این آموزش نسبت به دیگر آموزش های احراز هویت لاراول ساده تر و روان تر است و بسیار راحت میتوانید سیستم احراز هویت لاراول 8 را پیاده سازی کنید که از middleware استفاده خواهیم کرد.

 

اگر حوصله ی خواندن مقاله رو ندارید اشکالی نداره این مقاله بصورت ویدیو آموزشی در اوردیم : 

 

قدم ۱ − نصب لاراول ۸ 

خب قبل از هر چیزی ما نیاز به یک لاراول 8 داریم که تازه نصب شده باشد. برای نصب کردن لاراول 8 از کامپوزر در ترمینال یا کامند پرامپت استفاده کنید و کد زیر را در محلی که قصد دارید لاراول نصب شود ، اجرا کنید.

composer create-project --prefer-dist laravel/laravel blog

تصویر مربوط به دستور بالا : 

آموزش ساخت سیستم ثبت نام و ورود در لاراول ۸

 

قدم ۲ − تنظیمات پایگاه داده ی لاراول

در قدم ۲ ما باید تنظیمات لازم برای پایگاه داده را انجام دهیم تنظیماتی مانند نام پایگاه داده ، نام کاربری و پسورد تا بتوانیم با پایگاه داده یا دیتابیس در تعامل باشیم و عملیات CRUD لاراول را انجام دهیم.

خب بنابراین فایل .env که شامل تنظیمات هست را باز کنید و تنظیمات DB یا پایگاه داده را در این فایل انجام دهید که به شکل کدهای زیر پر کنید :‌

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=here your database name(blog)
DB_USERNAME=here database username(root)
DB_PASSWORD=here database password(root)

 

قدم ۳ − بروزرسانی migration ها و مدل ها در لاراول 

در این قدم ما باید به مایگریشن و مدل مربوط به user ها یک فیلد جدیدی به نام is_admin را اضافه کنیم. خب پس طبق کدهای زیر که در مسیر زیر هست تغییرات را روی لاراول خودتان انجام دهید : 

مسیر فایل : database/migrations/000_create_users_table.php

<?php
   
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
   
class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email');
            $table->timestamp('email_verified_at')->nullable();
            $table->boolean('is_admin')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
  
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

و فایل مدل که در مسیر app/Models/User.php است :

<?php
  
namespace App\Models;
  
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
  
class User extends Authenticatable
{
    use HasFactory, Notifiable;
  
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'is_admin'
    ];
  
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
  
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

 

خب حالا که کار تغییرات کدهای model و migration لاراول ما تمام شد بهتر است برای اعمال تغییرات روی دیتابیس یک بار مایگریت انجام دهیم که برای ثبت تغییرات مایگریشن ها در لاراول از دستور زیر در ترمینال استفاده کنید :‌

php artisan migrate

 

قدم ۴ − ساختن Auth با استفاده از scaffold

آموزش نصب پکیج لاراول ui برای احراز هویت

خب در این قدم ما قصد داریم auth را بسازیم که باعث ایجاد فرم های ورود ، ثبت نام و داشبورد کاربرها در لاراول نسخه ی 8 میگردد.

ما ابتدا باید یک پکیج برای لاراول 8 نصب کنیم به نام ui که از طریق دستور زیر نصب میشود :‌

composer require laravel/ui 

و سپس با استفاده از دستورات زیر در ترمینال یا کامند پرومپت میتوانید سیستم auth را پیاده سازی کنید :‌ ( هر دستور در یک خط است که باید یک به یک اجرا شوند . جمعا سه دستور )

php artisan ui bootstrap --auth
npm install
npm run dev

 

قدم ۵ - ساختن Middleware به نام IsAdmin

در این قدم ما باید یک middleware برای ادمین بسازیم تا به کاربرانی که ادمین هستند اجازه دهد به بخش مخصوص خود دسترسی داشته باشند.خب پس برای ساختن این میدلور لاراولی دستور زیر را در ترمینال یا کامند پرومپت اجرا کنید :‌

php artisan make:middleware IsAdmin

سپس فایل میدلور که در مسیر app/Http/middleware/IsAdmin.php است را باز کنید و محتویاتش را به شکل زیر تغییر دهید :‌

<?php
  
namespace App\Http\Middleware;
  
use Closure;
   
class IsAdmin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(auth()->user()->is_admin == 1){
            return $next($request);
        }
   
        return redirect(‘home’)->with(‘error’,"You don't have admin access.");
    }
}

 

سپس آنرا به کرنل اضافه کنید app/Http/Kernel.php :‌

....
protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    'is_admin' => \App\Http\Middleware\IsAdmin::class,
];
....

 

قدم ۶ − ساخت route ها 

در این قدم ما باید روت جدیدی را اضافه کنیم تا ادمین را کنترل کند پس فایل web.php را از قسمت route های لاراول باز کنید و به شکل زیر تغییر دهید :‌

routes/web.php

<?php
  
use Illuminate\Support\Facades\Route;
  
use App\Http\Controllers\HomeController;
  
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('admin/home', [HomeController::class, 'adminHome'])->name('admin.home')->middleware('is_admin');

 

قدم ۷ - اضافه کردن متود مربوط به ادمین در کنترلر اصلی لاراول

خب در اینجا ما به یک متود نیاز داریم که به کنترلر HomeController اضافه کنیم و نامش را adminHome میزاریم . فایل کنترلر در مسیر app/Http/Controllers/HomeController.php را باز کنید و به شکل زیر تغییر دهید : 

<?php
   
namespace App\Http\Controllers;
  
use Illuminate\Http\Request;
   
class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }
  
    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        return view('home');
    }
  
    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function adminHome()
    {
        return view('adminHome');
    }
    
}

 

قدم ۸ − ساختن فایل blade برای سیستم احراز هویت لاراول 8 

در این قدم نیاز داریم یک فایل blade برای ادمین بسازیم و فایل blade یوزر را ویرایش کنیم . طبق کدهای زیر ‌: 

فایل resources/views/home.blade.php : 

@extends('layouts.app')
   
@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Dashboard</div>
                <div class="card-body">
                    You are normal user.
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

فایل resources/views/adminHome.blade.php 

@extends('layouts.app')
   
@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Dashboard</div>
                <div class="card-body">
                    You are Admin.
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

 

قدم ۹ − بروزرسانی کردن کنترلر LoginController 

در این قدم باید تغییراتی را روی فایل LoginController داشته باشیم. زمانی که کاربر عمل لاگین را انجام میدهد نسبت به دسترسی او باید redirect به جای مناسبی شود . اگر کاربر معمولی باشد به روت home هدایت میشود و اگر ادمین باشد به سمت admin . 

پس فایل app/Http/Controllers/Auth/LoginController.php را باید به شکل زیر تغییر دهید : 

<?php
  
namespace App\Http\Controllers\Auth;
   
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
   
class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */
  
    use AuthenticatesUsers;
  
    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/home';
   
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
   
    public function login(Request $request)
    {   
        $input = $request->all();
   
        $this->validate($request, [
            'email' => 'required|email',
            'password' => 'required',
        ]);
   
        if(auth()->attempt(array('email' => $input['email'], 'password' => $input['password'])))
        {
            if (auth()->user()->is_admin == 1) {
                return redirect()->route('admin.home');
            }else{
                return redirect()->route('home');
            }
        }else{
            return redirect()->route('login')
                ->with('error','Email-Address And Password Are Wrong.');
        }
          
    }
}

 

قدم ۱۰ − ساختن Seeder ها در لاراول برای احراز هویت

برای ساختن ادمین یا یوزر عادی جدید ما از seeder استفاده میکنیم ، خب پس بیایید یک seeder جدید با استفاده از خط فرمان زیر بسازیم : 

php artisan make:seeder CreateUsersSeeder

و فایلی در مسیر database/seeds/CreateUsersSeeder.php ساخته میشود که بصورت زیر ویرایش کنید :‌

<?php
  
use Illuminate\Database\Seeder;
use App\Models\User;
   
class CreateUsersSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $user = [
            [
               'name'=>'Admin',
               'email'=>'admin@avasam.ir',
                'is_admin'=>'1',
               'password'=> bcrypt('123456'),
            ],
            [
               'name'=>'User',
               'email'=>'user@avasam.ir',
                'is_admin'=>'0',
               'password'=> bcrypt('123456'),
            ],
        ];
  
        foreach ($user as $key => $value) {
            User::create($value);
        }
    }
}

 

خب حالا بیایید sedeer را اجرا کنیم :‌

php artisan db:seed --class=CreateUsersSeeder

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

php artisan serve

برای ورود بعنوان یک یوزر از نوع Admin با اطلاعات زیر وارد شوید :‌

Email: admin@avasam.ir
Password: 123456
آموزش ساخت احراز هویت یا authentication در لاراول 8
 
و برای ورود و تست بعنوان یک کاربر نرمال از اطلاعات زیر استفاده کنید :‌
Email: user@avasam.ir
Password: 123456
لینک کوتاه این مقاله : https://avasam.ir/post/215
این سیستم برپایه ی علاقه مندی شما یک دوره ی مناسب به شما پیشنهاد میدهد
مرا بسوی بهترین دوره ی آموزشی که برای من مناسب است هدایت کن 🤖
برای استفاده ی دیگران و حمایت از ما در جامعه های زیر به اشتراک بگذارید

.:: نظرهای کاربران ::.
اصلاحیه / 3 روز پیش
سلام در بخش seeder، عبارت namespace Database\Seeders; را در بالای using ها استفاده کنید. من خواسم نبود و نیم ساعتی وقتم سر خطا تلف شد. در این حالت خطای کلاس یافت نشد دریافت میکردم. در مورد بخش npm install هم ممکنه کاریر npm را نصب نداشته باشد. بهتر است یکی لینکی به نصب npm هم بدید.
پشتیبانی آواسام :

سلام npm با استفاده از node نصب میشه باید برید سایت نود جی اس و اونو نصب کنید

قدیر / 6 ماه پیش

سلام ممنون از زحمتتون من تونستم با آموزش شما روی ورژن های جدید هم احراز هویت بسازم دستتون درد نکنه آموزش خوبی برای لاراول بود.

Moein...Niroumand / 3 سال پیش

سلام دوست عزیز ممنون از آموزشت
فقط ان پی ام ها تو نسخه 8 لاراول کار نمیکنه ارور میده میشه یکم دربارش توضیح بدید ؟؟

پشتیبانی آواسام :

سلام تشکر. لطفا به مستندات لاراول هشت مراجعه کنید این لینک https://laravel.com/docs/8.x/mix

لیلا غلامی / 3 سال پیش

واقعا بهترین و با کیفیت ترین آموزش ها را تولید میکنید نمیدونم چطوری تشکر کنم 

دوره ی آموزش پروژه محور ساخت کافه بازار دوره ی آموزش پروژه محور ساخت فروشگاه دیجیکالا آموزش لاراول دوره ی آموزش ویو جی اس