لوگو مجتمع پارسیان دیتا

احراز هویت در لاراول

آموزش لاراول

احراز هویت کاربران در لاراول به صورت دستی

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

همواره با استفاده از Auth Facade می‌توان به سرویس‌های authentication دسترسی پیدا کرد. بنابراین باید مطمئن باشیم که Auth Facade همواره به کنترلر ما اضافه شده باشد. پس از اضافه کردن عبارت use Illuminate\Support\Facades\Auth; به ابتدای کلاس کنترلر خود باید از متد attempt به صورت زیر استفاده کنید:

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Support\Facades\Auth;
 
class LoginController extends Controller
{
    /**
     * Handle an authentication attempt.
     *
     * @return Response
     */
    public function authenticate()
    {
        if (Auth::attempt(['email' => $email, 'password' => $password])) {
            // Authentication passed...
            return redirect()->intended('dashboard');
        }
    }
}


 این متد آرایه‌ای از کلید‌ها و مقادیر را به عنوان آرگومان اول می‌پذیرد. این مقادیر که درون آرایه وجود دارند بر اساس آنچه که برای یافتن کاربر در جدول users دیتابیس مورد استفاده قرار می‌گیرد، تنظیم می‌شوند. بنابراین در مثال بالا کاربر توسط مقدار ستون email بازیابی خواهد شد. سپس اگر کاربر پیدا شود، پسورد رمزنگاری‌شده موجود در دیتابیس نیز با password وارد شده توسط کاربر مطابقت داده خواهد شد. اگر هر دو پسورد یکسان باشند عمل احراز هویت برای این session و ورود کاربر انجام می‌شود.

اگر احراز هویت با موفقیت انجام شود متد attempt مقدار true را باز می‌گرداند. در غیر این صورت مقدار false بازگردانده خواهد شد.

همچنین متد intended در redirector کاربر را به یک URL‌ مشخص در صورت عدم تایید، هدایت می‌کند.

اضافه کردن شروط مختلف

اگر نیاز دارید که شرطهای مختلفی به کوئری احراز هویت اضافه کنید می‌تواند آن را به عنوان آرگومان به آرایه‌ی موجود در متد ارسال نمایید:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
    // The user is active, not suspended, and exists.
}


 تعیین کردن یک گارد مشخص

همچنین می‌توان با استفاده از متد guard مشخص کرد که هر بخش از نرم‌افزار شما از چه گاردی استفاده می‌کند و متناسب با آن احراز هویت انجام شود. برای اینکار باید نام گارد را به متد guard ارسال کرده و سپس تابع attempt‌ را اعمال کنیم:

if (Auth::guard('admin')->attempt($credentials)) {
    //
}


خروج کاربران

برای خروج کاربران از نرم‌‎افزار تحت وب شما، همواره باید از متد logout در Auth Facade استفاده کرد. این متد اطلاعات هویتی هر کاربر را از Session حذف می‌کند:

Auth::logout();

به یاد آوردن کاربران

گاهی نیاز داریم که در فرم‌های ورود و عضویت خود یک گزینه به نام remember me یا «مرا به خاطر بسپار» اضافه کنیم. با استفاده از این گزینه کاربر هر وقت با session مشخص وارد شود به سرعت ورود به سایت کرده و نیازی به وارد کردن اطلاعات مجدد نیست. برای فعال‌کردن این قابلیت باید یک آرگومان دوم به متد attempt اضافه کرد. همچنین در نظر داشته باشید که جدول users نیز باید یک ستون رشته‌ای با عنوان remember_token داشته باشد تا رمز remember me برای هر کاربر را در خود ذخیره کند:

if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
    // The user is being remembered...
}

توجه: در صورتیکه که از کلاس کنترلر LoginControllers.php استفاده می‌کنید نیازی به اضافه کردن آرگومان دوم نیست و به صورت پیش‌فرض این قابلیت به نرم‌افزار شما اضافه خواهد شد.

می‌توان با استفاده از متد viaRemember برای کاربرانی که روی گزینه «مرا به خاطر بسپار» کلیک کرده‌اند شرایطی را اعمال کرد:

if (Auth::viaRemember()) {
    //
}

متدهای دیگر احراز هویت

احراز هویت یک کاربر خاص

در صورتیکه نیاز دارید یک کاربر خاص را همواره درون سایت وارد کنید می‌توانید از متد login استفاده نمایید. همچنین باید مدل App\User وجود داشته باشد:

Auth::login($user);

// Login and "remember" the given user...
Auth::login($user, true);


 همچنین می‌توان این متد را به همراه تعریف گاردها مورد استفاده قرار داد:

Auth::guard('admin')->login($user);


 احراز هویت یک کاربر خاص با استفاده از ID

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

Auth::loginUsingId(1);
 
// Login and "remember" the given user...
Auth::loginUsingId(1, true);

 احراز هویت یک کاربر تنها یک‌بار

گاهی نیاز است تا کاربران تنها برای یک درخواست مشخص احزار هویت آنها صورت بگیرد. برای اینکار از متد once استفاده خواهیم کرد. هیچ Session یا Cookie استفاده نمی‌شود، این متد هنگامیکه برای ساخت یک API‌ بدون ذخیره‌سازی Session بسیار کاربردی است:

if (Auth::once($credentials)) {
    //
}


احراز هویت پایه‌ای HTTP

با استفاده از Provider احراز هویت HTTP Basic به راحتی هرچه ممکن می‌توانید احراز هویت کاربران را بدون نصب و راه اندازی صفحه Login انجام دهید. برای شروع ابتدا میان‌افزار auth:basic را به مسیر خود اضافه کنید. میان‌افزار auth:basic درون فریم‌ورک لاراول به صورت خودکار وجود دارد و برای تعریف آن باید به صورت زیر عمل کنید:

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

 هنگامیکه میان‌افزار به مسیر اضافه می‌شود، به صورت خودکار احراز هویت روی کاربر بر اساس ستون email صورت گرفته و اجازه ورود به کاربر داده خواهد شد.


اضافه کردن یک گارد شخصی

گاهی اوقات ممکن است شما بخواهید یک گارد شخصی و دلخواه برای خود ایجاد کرده و آن را در احراز هویت کاربران مورد استفاده قرار دهید. برای این کار باید از متد extend در Auth Facade بهره برده و سپس آن را برای فراخوانی یک provider درون Service Provider، جای دهید.


<?php
 
namespace App\Providers;
 
use App\Services\Auth\JwtGuard;
use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
 
class AuthServiceProvider extends ServiceProvider
{
    /**
     * Register any application authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();
 
        Auth::extend('jwt', function ($app, $name, array $config) {
            // Return an instance of Illuminate\Contracts\Auth\Guard...
 
            return new JwtGuard(Auth::createUserProvider($config['provider']));
        });
    }
}


همانگونه که در مثال فوق مشاهده می‌کنید یک تابع callback به متد extend یک نمونه از Illuminate\Contracts\Auth\Guard را باز می‌گرداند. این نمونه شامل متدهای مورد نیازی است که برای تعریف گارد دلخواه خود مورد استفاده قرار می‌دهید.هنگامیکه گارد دلخواه خود را در AuthServiceProvider تعریف کردید باید آن را به فایل auth.php و آرایه‌ی guards اضافه کنید:

'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],


اضافه کردن یک User Provider دلخواه

اگر از جدول users برای ذخیره‌سازی کاربران استفاده نمی‌کنید همواره باید User Provider احراز هویت خود را توسعه دهید. برای اینکار از متد provider در Auth Facade استفاده کرد و یک User Provider دلخواه ایجاد می کنیم:

<?php
 
namespace App\Providers;
 
use Illuminate\Support\Facades\Auth;
use App\Extensions\RiakUserProvider;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
 
class AuthServiceProvider extends ServiceProvider
{
    /**
     * Register any application authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();
 
        Auth::provider('riak', function ($app, array $config) {
            // Return an instance of Illuminate\Contracts\Auth\UserProvider...
 
            return new RiakUserProvider($app->make('riak.connection'));
        });
    }
}


هنگامیکه با استفاده از دستورهای فوق یک provider جدید را با استفاده از متد provider ایجاد می‌کنید باید متغییر providers را در فایل auth.php تغییر داده و نام آن را به سیستم خود اضافه کنید:

'providers' => [
    'users' => [
        'driver' => 'riak',
    ],
],

و در نهایت باید نام آن Provider‌ را به متغییر guards خود اضافه کنید:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
],

 

مطالب مرتبط

آموزش Exception ها در لاراول

گاها برای شما پیش اومده ،  مثلا میخواهید خطای ۴۰۴ تولید کنید و این خطا را ب

آموزش namespace در php

     آموزش Namespace در PHP در PHP 5.3 یک مفهوم دیگر به نام name

آموزش لاراول view ها

  کار با view ها و Blade view ها یکی از عناصر سه گانه الگوی طراحی MVC هست

مسیردهی(routing)در لاراول

  مسیردهی(routing)در لاراول در فولدر routes باید route های برنامه را تعریف

ساختار فایل ها و پوشه ها در لاراول

    ساختار فایل ها و پوشه ها در لاراول اگر فولدری  که لاراول را

برخی از مهارت ها

آخرین مطالب

15 ارديبهشت 1397
11 ارديبهشت 1397
11 ارديبهشت 1397
08 ارديبهشت 1397

خبرنامه

جستجو