آموزش احراز هویت با laravel passport

آموزش احراز هویت با laravel passport

احراز هویت با laravel passport برای ایجاد یک api اندروید یا ios گزینه بسیار خوبی می باشد و در صورت استفاده صحیح امنیت را تضمین می کند laravel passport نوع OAuth2 می باشد که jwt را در قالب یک پکیج آماده کرده است. لاراول پاسپورت از نسخه 5.3 به بعد در اختیار دوستداران این فریمورک قرار گرفت که یک روش صحیح و بسیار مناسب برای احراز هویت برای انواع مختلف برنامه های خارج از خود فریمورک لاراول می باشد در خود لاراول ما می توانیم با session ، token  و ... احراز هویت کاربر را انجام دهیم اما برای برنامه های خارجی باید از jwt که در لاراول با نام laravel passport آماده شده است استفاده کنیم. نصب و راه اندازی این پکیج بسیار ساده می باشد جاب تیم با یک آموزش معنی و مفهوم استفاده از این پکیج را به سادگی در ادامه بیان خواهد کرد این آموزش برای نسخه لاراول 5.8 می باشد و آموزش restful api در لاراول،passport لاراول،rest api در لاراول همین آموزش می باشد.

زمان مطالعه: 3 دقیقه
بازدید: 1570
پرسش و پاسخ: 0

laravel passport چیست؟

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

نصب laravel passport 

برای نصب این پکیج مراحل ذیل را مرحله به مرحله انجام می دهیم و در پایان یک مثال از نحوه استفاده از لاراول پاسپورت را خواهیم داشت. ابتدا کد زیر را برای دانلود این پکیج در مسیر پروژه مورد نظر اجرا می کنیم

composer require laravel/passport

سپس جداول مورد نیاز این پکیج را با دستور ذیل ایجاد می کنیم 

php artisan migrate

در صورت نیاز برای سفارشی کردن جداول این پکیج قبل از اجرای دستور بالا دستور ذیل را اجرا کنید و نیازهای خود را در migration مربوطه ایجاد کنید سپس دستور بالا را اجرا کنید.

php artisan vendor:publish --tag=passport-migrations

سپس برای نهایی سازی نصب و ایجاد کلیدهای دسترسی امن دستور ذیل را اجرا می کنیم

php artisan passport:install

سپس در مدل User از Trait (کلاس با ارث بری چندگانه در php) استفاده و فراخوانی می کنیم در قسمت بالا Laravel\Passport\HasApiTokens را use کنید سپس در داخل مدل HasApiTokens را فراخوانی کنید. که مدل User به شکل زیر خواهد بود

namespace App;

use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
   use HasApiTokens, Notifiable; }

در ادامه Passport::routes را به متد boot در فایل AuthServiceProvider اضافه می کنیدمسیر این فایل app\Providers\AuthServiceProvider.php می باشد این متد route‌های لازم برای صدور توکن‌های دسترسی، لغو توکن‌های دسترسی، کلاینت‌ها و توکن‌های دسترسی شخصی را ثبت می‌کند:

این فایل به صورت ذیل خواهد بود

namespace App\Providers;

use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider {
  
    protected $policies = [         'App\Model' => 'App\Policies\ModelPolicy',     ];
    public function boot() {       

              $this->registerPolicies();  

             Passport::routes();    

      }

}

 برای پایان نصب و راه اندازی نیز در فایل config/auth.php تنظیمات نوع driver برای api را به passport تغییر می دهیم احراز هویت درخواست های خارج از لاراول از TokenGuard استفاده خواهد کرد.

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

   'api' => [       

  'driver' => 'passport',    

     'provider' => 'users',    

], ],

تا اینجا این پکیج به صورت کامل نصب شده است و می توانید از آن به صورت دلخواه خود استفاده کنید. ما یک مثال ساده لاگین برای api خود ایجاد می کنیم تا طرز صحیح استفاده از این پکیج را به شما بیاموزیم 

کنترلر User را ایجاد میکنیم

php artisan make:controller API\UserController

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

namespace App\Http\Controllers\API;

use App\Client;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Support\Facades\Auth;
use Validator;

class UserController extends Controller
{
    public function login(Request $request){

      $request->validate([
     'mobile' => 'required|digits:11',
     'password' => 'required|string'
    ]);

     $credentials = request(['mobile', 'password']);  
 
     if(!Auth::attempt($credentials)){
          return response()->json([ 'message' => 'Unauthorized' ], 401);
          }
           
     $user = $request->user();
     $tokenResult = $user->createToken('Personal Access Token');
     $token = $tokenResult->token;

          $token->save();
     return response()->json([
            'access_token' => $tokenResult->accessToken,
            'token_type' => 'Bearer',
            'expires_at' => Carbon::parse( $tokenResult->token->expires_at )->toDateTimeString()
     ]);
   }

   public function user(Request $request) { return response()->json($request->user()); }


   public function logout(Request $request) {
        $request->user()->token()->revoke();
        return response()->json([ 'message' => 'Successfully logged out' ]);
   }

}

آموزش لاراول (laravel) دوره جامع پروژه محور ساخت فروشگاه اینترنتی

بعد از ساخت کنترلر، مسیر (route) این مسیرها را ایجاد می کنیم

use Illuminate\Http\Request;

Route::group([ 'prefix' => 'auth' ], function () {

Route::post('login', 'AuthController@login');

   Route::group([ 'middleware' => 'auth:api' ], function() {

       Route::get('logout', 'AuthController@logout');

       Route::get('user', 'AuthController@user');

   });

});

شما می توانید با برنامه postman این مثال را تست کنید.

بهزاد میرزازاده
مسیر درست با پرسش های درست ساخته می شود

مشاهده تمام مطالب نویسنده