Laravel Passport

laravel passport
Trong bài viết này, chúng ta sẽ xem xét cách triển khai xác thực người dùng đầy đủ và một hình thức kiểm soát truy cập đơn giản trong API bằng Laravel và Passport. Bạn nên có kinh nghiệm làm việc với Laravel vì đây không phải là hướng dẫn giới thiệu.

Điều kiện trước khi cài đặt:

  • PHP 7+, MySQL và Apache (Bạn có thể sử dụng XAMPP hoặc wampserver64 .)

  • Composer

  • Laravel 8++

Với cài đặt ở trên, chúng ta đã sẵn sàng để bắt đầu. Đảm bảo thiết lập kết nối cơ sở dữ liệu của bạn bằng cách chỉnh sửa .env tệp.

Để cài đặt package ‘Passport’ vào ứng dụng đang chạy của bạn, hãy chạy các lệnh sau:

composer require laravel/passport

Passport đi kèm với việc thiết lập cơ sở dữ liệu để lưu trữ mã thông báo truy cập và các hoạt động của máy khách OAuth2. Do đó, chúng ta nên chạy các migrate của mình như sau để tạo các bảng:

php artisan migrate

Bây giờ chúng ta đã tạo passport các bảng xác thực của mình, chúng ta cần thiết lập encryption keys mà chúng ta sẽ sử dụng trong ứng dụng để tạo các tệp access tokens.

php artisan passport:install


Thiết lập mô hình để sử dụng cấu hình hộ chiếu/Hộ chiếu

Chúng ta sẽ thêm Laravel\Passport\HasApiTokens vào Model người dùng do Laravel tạo ( App/Models/User).



namespace App\Models;


use Laravel\Passport\HasApiTokens;


class User extends Authenticatable

{

    use HasApiTokens, HasFactory, Notifiable;


    protected $fillable = [

        'name',

        'email',

        'password',

    ];


    protected $hidden = [

        'password',

        'remember_token',

    ];

}


Tiếp theo, cập nhật  App\Providers\AuthServiceProvider như sau:



use Laravel\Passport\Passport;


class AuthServiceProvider extends ServiceProvider

{

    protected $policies = [

        'App\Models\Model' => 'App\Policies\ModelPolicy',

    ];


    /**

     * we call the passport: routes

     * to register routes that our application will use * to issue tokens and clients

     * @return void

     */


    public function boot()

    {

        $this->registerPolicies();


        if (!$this->app->routesAreCached()) {

            Passport::routes();

        }

    }

}


Bây giờ chúng ta đã có một cách để đăng ký các tuyến đường mã thông báo, hãy cập nhật config/auth.php như sau:


return [

    /**

     * update the guards api only

     */

    'guards' => [

        'web' => [

            'driver'   => 'session',

            'provider' => 'users',

        ],


        /**

         * update the driver from token to passport

         */


        'api' => [

            'driver'   => 'passport',

            'provider' => 'users',

            'hash'     => false,

        ],

    ],

];


Thêm bộ điều khiển xác thực

Bây giờ chúng ta đã thiết lập xong passport các cấu hình, hãy tạo một Controller cho việc xác thực.


php artisan make:controller AuthController



use App\Http\Controllers\Controller;

use Illuminate\Http\Request;


class AuthController extends Controller

{

    /**

     * handle user registration request

     */

    public function registerUserExample(Request $request){

        $this->validate($request,[

            'name'=>'required',

            'email'=>'required|email|unique:users',

            'password'=>'required|min:8',

        ]);

        $user= User::create([

            'name' =>$request->name,

            'email'=>$request->email,

            'password'=>Hash::make($request->password)

        ]);


        $access_token_example = $user->createToken('PassportExample@Section.io')->access_token;

        //return the access token we generated in the above step

        return response()->json(['token'=>$access_token_example],200);

    }


    /**

     * login user to our application

     */

    public function loginUserExample(Request $request){

        $login_credentials=[

            'email'=>$request->email,

            'password'=>$request->password,

        ];

        if(auth()->attempt($login_credentials)){

            //generate the token for the user

            $user_login_token= auth()->user()->createToken('PassportExample@Section.io')->accessToken;

            //now return this token on success login attempt

            return response()->json(['token' => $user_login_token], 200);

        }

        else{

            //wrong login credentials, return, user not authorised to our system, return error code 401

            return response()->json(['error' => 'Unauthorised Access'], 401);

        }

    }


    /**

     * This method returns authenticated user details

     */

    public function authenticatedUserDetails(){

        //returns details

        return response()->json(['authenticated-user' => auth()->user()], 200);

    }

}


Thêm các tuyến xác thực ứng dụng

Với AuthController đã sẵn sàng để xử lý Requests hãy thêm các Routes để hoàn tất thiết lập ứng dụng.


//routes/api.php

Route::post('register',[AuthController::class,'registerUserExample']);

Route::post('login',[AuthController::class,'loginUserExample']);

//add this middleware to ensure that every request is authenticated

Route::middleware('auth:api')->group(function(){

    Route::get('user', [AuthController::class,'authenticatedUserDetails']);

});


Kiểm tra ứng dụng hộ chiếu của chúng tôi

php artisan serve

Phần kết luận

Trong bài viết này, đầu tiên mình thiết lập Laravel Passport trong một dự án hiện có. Tiếp theo, tạo các Routes cho API. Sau khi hoàn tất, kiểm tra API REST của Laravel và xác minh rằng nó hoạt động như dự định.

Nếu bạn gặp phải bất kỳ vấn đề nào khi triển khai API, hãy liên hệ qua email cho mình.

Tham khảo: https://github.com/hungnguyen251/laravel-passport-and-email-verification-api