آموزش ساخت سیستم احراز هویت چندگانه در لاراول ۸
آموزش احراز هویت یا Authentication در لاراول 8
در این آموزش قصد داریم نحوه ی ایجاد سیستم احراز هویت یا Authentication در لاراول 8 را آموزش دهیم و به همراه مثال واقعی و عملی به همراه کدهای اماده شما را راهنمایی کنیم. نوع احراز هویت که در این آموزش تدریس میشود Multi auth در لاراول میباشد.
در این پست آموزشی بصورت قدم به قدم نحوه ی ایجاد سیستم احراز هویت لاراول 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
خب در این قدم ما قصد داریم 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
Email: user@avasam.ir
Password: 123456
سلام npm با استفاده از node نصب میشه باید برید سایت نود جی اس و اونو نصب کنید
سلام ممنون از زحمتتون من تونستم با آموزش شما روی ورژن های جدید هم احراز هویت بسازم دستتون درد نکنه آموزش خوبی برای لاراول بود.
سلام دوست عزیز ممنون از آموزشت
فقط ان پی ام ها تو نسخه 8 لاراول کار نمیکنه ارور میده میشه یکم دربارش توضیح بدید ؟؟
سلام تشکر. لطفا به مستندات لاراول هشت مراجعه کنید این لینک https://laravel.com/docs/8.x/mix
واقعا بهترین و با کیفیت ترین آموزش ها را تولید میکنید نمیدونم چطوری تشکر کنم