آموزش نصب پاسپورت در لاراول

حمید تیموری 2573 بازدید 1398/03/02
آموزش نصب پاسپورت در لاراول

حتما میدانید که لاراول در حالت پیشفرض برای احراز هویت از session استفاده میکند. زمانی که فردی احراز هویت میکند یا اصطلاحا عملیات login را انجام میدهد، یک session در مرورگر کاربر ایجاد میشود و تا زمانی که آن session وجود داشته باشد، همچنان در سیستم به عنوان یک فردی شناخته میشود که در برنامه login کرده است.

حالا فکر کنید میخواهید سیستم احراز هویت را برای یک برنامه موبایلی بنویسید. اما حتما میدانید که session بین موبایل و سرور قابل استفاده نیست و باید از یک روش دیگر استفاده کرد.
درواقع احراز هویت در API به سبک دیگری انجام میشود. لاراول برای این مسئله Passport را ارائه داده است که بر اساس ouath2-server ساخته شده است.

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

composer require laravel/passport

بعد از نصب، تعدادی migration به پروژه شما اضافه میشود، که باید با دستور زیر را اجرا کنید که جداول مورد نیاز در دیتابیس شما ساخته شوند:

php artisan migrate

بعد از اجرای دستور بالا، باید کلیدهای رمزنگاری یا enctyption keys ساخته شود که با دستور زیر این کار انجام میشود.

php artisan passport:install

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

بعد از دستورات بالا، به مدل خود (برای مثال User) یک trait به نام HasApiTokens اضافه کنید.

<?php

namespace App;

use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

حالا به AuthServiceProvicer بروید و Passport:routes را به متد boot اضافه کنید.
این متد route های مورد نیاز passport را فراهم میکند.

<?php

namespace App\Providers;

use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        Passport::routes();
    }
}

درنهایت شما باید در config/auth.php قسمت api را تغییر دهید و passport را جایگزین token کنید:

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

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

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

php artisan make:controller PassportController

محتویات زیر را به کنترلر اضافه کنید:

<?php
 
namespace App\Http\Controllers;
 
use App\User;
use Illuminate\Http\Request;
 
class PassportController extends Controller
{
    /**
     * Handles Registration Request
     *
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function register(Request $request)
    {
        $this->validate($request, [
            'name' => 'required|min:3',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:6',
        ]);
 
        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => bcrypt($request->password)
        ]);
 
        $token = $user->createToken('Laraman')->accessToken;
 
        return response()->json(['token' => $token], 200);
    }
 
    /**
     * Handles Login Request
     *
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function login(Request $request)
    {
        $credentials = [
            'email' => $request->email,
            'password' => $request->password
        ];
 
        if (auth()->attempt($credentials)) {
            $token = auth()->user()->createToken('Laraman')->accessToken;
            return response()->json(['token' => $token], 200);
        } else {
            return response()->json(['error' => 'UnAuthorised'], 401);
        }
    }
 
    /**
     * Returns Authenticated User Details
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function details()
    {
        return response()->json(['user' => auth()->user()], 200);
    }
}

به کد بالا دقت کنید:
بعد از register یا login با استفاده از تابع  createToken یک accessToken برای کاربر ایجاد میکنیم
به خروجی تابغ register دقت کنید:

طبق کدی که نوشتیم ، اگر اطلاعات وارد شده صحیح باشد یک توکن دریافت خواهیم کرد که نشان گر این است که کاربر احراز هویت شده است.
حالا برای استفاده از این توکن باید در header تغییرات زیر را اعمال کنیم:

Accept: application/json  (1
2)  Authorization: Bearer YourTokenIsHere

دقت کنید که در مورد دوم، بین کلمه Bearer و توکن باید یک فاصله بگذارید.
حالا برای مثال، اطلاعات کاربر را از طریق api میگیریم :

میبینید که اطلاعات کاربر را به درستی برمیگرداند.
این پکیج لاراول، ویژگی های متعددی دارد که در مقالات بعدی توضیح خواهم داد.

اگر سوالی داشتید از طریق نظرات بپرسید.

دیگر مقالات
امید کیانی 1802 بازدید 1398/07/14
امید کیانی 1430 بازدید 1398/06/11
امید کیانی 1945 بازدید 1398/01/26
امید کیانی 981 بازدید 1398/05/14
حمید تیموری 1241 بازدید 1397/05/09


نظرات (10)
مرضیه بارویی
1399/02/24 - 21:40
دلیل این خطا جیه "Call to undefined method App\\User::createToken()",
حمید تیموری
1399/02/25 - 12:07
تو مدل user یه trait هست که باید use کنید به اسم HasApiTokens
مرضیه بارویی
1399/02/24 - 21:03
ی سوال چرا create token تو ریجستری هم هست مگه زمان ثبت نام لازمه توکن بسازیم
حمید تیموری
1399/02/25 - 12:05
به این دلیل که ممکنه بعد از ثبت نام قصد داشته باشید کاربر رو لاگین کنید
محسن علیزاده
1398/09/20 - 22:04
سلام،میشه لطفا آموزش oauth server هم با پاسپورت بذارید؟ تشکر
حمید تیموری
1398/09/21 - 12:24
بله حتما اگر فرصتشو پیدا کنم حتما آموزشی در این رابطه منتشر میکنم
شاهین مرادی
1398/03/07 - 14:45
حمید جان کارت درسته خیلی عالی بود
حمید تیموری
1398/03/07 - 23:05
لطف داری شاهین جان
حدیث بنی اسد ازاد
1398/03/02 - 10:38
بسیار عالی بود ممنون از سایت خوبتون
حمید تیموری
1398/03/02 - 14:55
خواهش میکنم. لطف دارید
برای ثبت نظر ابتدا وارد سایت شوید