تعداد بازدید: 2270

Authentication

لاراول یک سیستم Authentication شامل امکاناتی نظیر احراز هویت (کاربر جاری چه نقشی داره ؟ مهمان یا عضو ) ، ثبت نام (Register) ، ورود و خروج (Login – Logout) و بازیابی پسورد (درخواست پسورد جدید و امکان ارسال آن به ایمیل) و … در اختیار شما قرار می دهد.

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

تنظیمات مربوط به authentication در مسیر config/auth.php موجود می باشد.

Authentication Quickstart

برای برپایی سیستم authentication در لاراول باید دستور زیر را وارد کنید:

php artisan make:auth

Authentication Controllers

سیستم مرکزی پردازش نرم افزار ما controller بود. پس از اجرای دستور بالا controller های زیر در مسیر App\Http\Controllers\Auth به برنامه ما اضافه می شوند.

  • RegisterController
  • LoginController
  • ForgotPasswordController
  • ResetPasswordController

چون موارد اضافه شده واقع در مسیر App\Http\Controllers می باشند لذا جزو هسته به شمار نمی آیند و شما بسته به نیاز می توانید تغییراتی را در متد های هر یک از controller های موجود در  آن ها بدهید.

Authentication Model

به صورت پیش فرض برای ماژول authentication ما App\User Eloquent model را داریم. دقت داشته باشید که مدل ساخته شده بر اساس Eloquent ORM می باشد.

Authentication Migration

جداول پایگاه داده پیش فرض در ماژول authentication با نام های users , password_resets می باشد که migration های مربوط به این دو جدول با نام های زیر پیاده سازی می شوند.

  • create_users_table
  • create_password_resets_table

نکته : پس از اجرای دستور make:auth جداول در پایگاه داده ساخته نمی شوند و تنها migration های آن ها ساخته می شود. خوب اگر با ساختار جداول در پایگاه داده مشکلی ندارید دستور php aritisan migrate را بزنید.

نکته : شما می توانید پس از مشاهده ساختار migration آن را با توجه به نیاز خودتان تغییر دهید و بعد دستور migrate را اجرا کنید.فقط دقت داشته باشید که قوانین کلی برای برخی فیلد ها را باید رعایت کنید :

  • password : در جدول users از نوع string و حداقل طول 60 کاراکتر (با توجه به الگوریتم رمز نگاری استفاده شده در لاراول)
  • remember_token : در جدول users از نوع string و با قابلیت nullable و حداقل 100 کاراکتر که با متد rememberToken با همین ویژگی ها ساخته می شود.

Authentication Routes

پس از برپایی ماژول authentication در نرم افزار دو خط کد زیر به فایل web.php (مربوط به route های نرم افزار) اضافه می شود:

<?php
Auth::routes();
Route::get('/home', 'HomeController@index');

کدهای زیر expand شده دو کد بالاست :

<?php
// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'Auth\RegisterController@register');

// Password Reset Routes...
$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm');
$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail');
$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm');
$this->post('password/reset', 'Auth\ResetPasswordController@reset');

همچنین با فرمان php artisan route:list می توانید لیست route های اضافه شده به نرم افزار را پس از برپایی authentication مشاهده فرمایید.

Authentication View

پس از برپایی سیستم authentication در نرم افزار فایل های view در مسیر resources/views/auth ساخته می شوند. همچنین دو فایل views/layouts/app.blade.php و views/home.blade.php ساخته می شود که هر کدام که از قبل موجود باشد از شما می پرسد که دوباره بسازد یا خیر.

نکته : Helper هایی در رابطه با authentication در قسمت view وجود دارد که می توانید با استفاده از این توابع در view ها نیز از امکانات authentication استفاده کنید. مثلا احراز هویت کاربر مهمان و یا عضو وب سایت با template زیر

@auth
    // The user is authenticated...
@endauth

@guest
    // The user is not authenticated...
@endguest

Authenticating

پس از پیاده سازی پایگاه داده ، controllers ، views ، Routes ، Model در نرم افزار شما این امکان برای شما فراهم بود تا بتوانید از امکانات سیستم authentication در لاراول استفاده کنید.

شما با تغییر در امکاناتی که در هسته مرکزی پردازش authentication یا همان controller ها برای شما قرار داده شده می تونید این سیستم رو برای خودتون شخصی سازی کنید. این شخصی سازی می تونه شامل تغییر در properties , methods موجود باشه یا این که تعریف method جدید در controller های تعریف شده.

همچنین با استفاده از Auth (Auth facade) می تونید از امکانات تعبیه شده در ماژول authentication استفاده کنید.

Path Customization

به صورت پیش فرض پس از عملیات های authenticate کاربر به /Home ریدایرکت می شود.(به همین دلیل route و view مربوط به Home پس از برپایی authentication برای نرم افزار اضافه می شود).

برای تغییر مسیر redirect پس از authentication باید در controller های زیر property را تعریف کنید:

<?php
protected $redirectTo = '/';

همچنین اگر برای تعیین مسیر redirect نیاز به منطق و محاسبات داشتید باید method با نام redirectTo تعیین کنید.

<?php
protected function redirectTo()
{
    return '/path';
}

نکته : اولویت method برای تعیین مسیر redirect بالا تر از property آن است.

نکته : مقادیر RedirectTo برای زمان Login , Logout , Register می باشد . در کلاس های RegisterController و LoginController باید پیاده سازی شود.

نکته :مقداری که باید در method یا property تعیین کنیم برای بازگشت باید از نوع path باشد. از همان نوع مقداری که در route می دادیم.

Username Customization

فرم ثبت نام کاربر دارای یک سری فیلد ها می باشد(name , email , password). این فیلد ها در جدول users در پایگاه داده نیز هست.

همان طور که می دانید برای تغییر یه روند در نرم افزار باید سه مسیر زیر را طی کرد :

  • پروسه انجام – Controller
  • پایگاه داده –  migration – DB , model
  • نمایش – view

برای هر سیستم authentication یک نام کاربری یکتا به ازای هر کاربر نیاز داریم. به صورت پیش فرض لاراول از email به عنوان نام کاربری استفاده می کند. برای تغییر این مورد باید سه روند بالا را در نظر داشته باشیم :

  • تغییر در controller مربوطه
  • تغییر در پایگاه داده در صورت نیاز
  • تغییر فرم ثبت نام در صورت نیاز (باید فیلد مربوطه در فرم ثبت نام باشد و در پایگاه داده کاربر ثبت گردد که در پروسه controller آن را به عنوان username ثبت کنیم)

پس از تغییر در پایگاه داده و فرم ثبت نام باید به سراغ LoginController برویم و پس از آن به سراغ متد username برویم و مقدار بازگشتی آن را تغییر دهیم:

<?php
public function username()
{
    return 'username';
}

Retrieving The Authenticated User

برای دریافت کاربر جاری می توان از  Auth facade استفاده کرد :

<?php
use Illuminate\Support\Facades\Auth;

// Get the currently authenticated user...
$user = Auth::user();

// Get the currently authenticated user's ID...
$id = Auth::id();

همچنین با استفاده از شئ request نیز این امکان وجود دارد :

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class ProfileController extends Controller
{
    /**
     * Update the user's profile.
     *
     * @param  Request  $request
     * @return Response
     */
    public function update(Request $request)
    {
        //returns an instance of the authenticated user...
        $request->user()
    }
}

Protecting Routes

به ازای هر Path از route یک callback اجرا می گردد. حالا اگر ما بخواهیم که تنها callback برای کاربران لاگین اجرا بشه باید از route محافظت کنیم.

ما به دو روش می توانیم از یک درخواست محافظت کنیم :

  • مستقیما به route از auth استفاده کنیم
  • در درون __construct از متدهای auth Middleware استفاده کنیم.

هر path از route به یک method از یک کلاس از controller میره . پس ما نهایتا از method ها محافظت کنیم.

همونطور که می دونید پس از ساخت شی اولین متدی که فراخوانی میشه __construct هست.  پس باید این محافظت از درون __construct  انجام بشه. به شکلی که ما نام متد هایی که به ازای آن ها باید کاربر لاگین باشد به وسیله Middleware با نام auth می آوریم:

auth Middleware

<?php
public function __construct()
{
    $this->middleware('auth');
}

در مثال بالا گفتیم که تمامی method های موجود در این کلاس (کلاسی که __construct آن من هستم) باید برای دسترسی به آن ها کاربر درخواست دهنده لاگین باشد.

<?php
Route::get('profile', function () {
    // Only authenticated users may enter...
})->middleware('auth');

در مثال بالا گفتیم که این route با این نام (profile) توسط middleware با نام auth محافظت می شود. یعنی تنها callback برای کاربران درخواست دهنده ای اجرا می شود که لاگین کرده باشند.

only Method

<?php
public function __construct()
{
    $this->middleware('auth')->only(['createProduct','admin']);
}

در مثال بالا گفتیم تنها method هایی با نام های createProduct و admin باید در صورتی برای کاربر درخواست دهنده اجرا گردند که کاربر لاگین باشد.

except Method

<?php
public function __construct()
{
   $this->middleware('auth')->except(['archive','single']); 
}

در مثال بالا گفته که غیر از متد های archive , single تمامی متد های کلاس ProductController (مثال) برای نمایش نیاز به لاگین دارد.

guest Middleware

guest دقیقا برعکس auth عمل می کند. یعنی اگر از متدهای only و except از آن استفاده کنیم نتیجه ای برعکس نتایج بالا را می دهد.

نکته : میان افزار های auth و guest در دسته میان افزارهای routeMiddlewares قرار دارد.

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای Authentication

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *