首頁 > php框架 > Laravel > Laravel開發:如何使用Laravel Sanctum實現API身分驗證與授權?

Laravel開發:如何使用Laravel Sanctum實現API身分驗證與授權?

PHPz
發布: 2023-06-13 19:07:18
原創
2797 人瀏覽過

Laravel是一款流行的PHP Web開發框架,它提供了許多強大的功能和工具來簡化Web應用程式的開發和維護。 Laravel Sanctum是Laravel框架的一個插件,它提供了API身份驗證和授權的功能,可以輕鬆保護您的API端點免受未經授權的存取。

在本文中,我們將學習如何使用Laravel Sanctum實現API身分驗證和授權。

一、什麼是Laravel Sanctum?

Laravel Sanctum是一個輕量級的身份驗證包,它提供了簡單但強大的API身份驗證和授權功能。它基於Laravel中間件和HTTP認證,允許我們安全地將身份驗證令牌附加到API請求中。

Laravel Sanctum支援兩種驗證方式:基於Cookie的身份驗證和基於Token的身份驗證。基於Cookie的身份驗證使用Laravel中間件來驗證請求中是否存在有效的認證Cookie。另一種驗證類別Header中的Token並檢查其是否有效。

二、安裝Laravel Sanctum

在開始之前,我們需要先安裝Laravel Sanctum。使用composer套件管理器可以輕鬆安裝Laravel Sanctum:

1

composer require laravel/sanctum

登入後複製

當然了,也可以透過在composer.json檔案中加入以下要求來手動安裝:

1

2

3

4

5

{

  "require": {

    "laravel/sanctum": "^2.9"

  }

}

登入後複製

完成後,執行以下命令來發布Laravel Sanctum設定檔和資料庫遷移檔:

1

2

3

php artisan vendor:publish --tag=sanctum-config

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

php artisan migrate

登入後複製

三、設定Laravel Sanctum

  1. 首先,需要添加laravel / sanctum中間件到您的應用程式的HTTP內核中。

修改app/Http/kernel.php文件,新增Sanctum中間件:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

// app/Http/Kernel.php

 

protected $middleware = [

    // ...

    LaravelSanctumHttpMiddlewareEnsureFrontendRequestsAreStateful::class,

];

 

protected $middlewareGroups = [

    'web' => [

        // ...

    ],

 

    'api' => [

        LaravelSanctumHttpMiddlewareEnsureFrontendRequestsAreStateful::class,

        'throttle:api',

        IlluminateRoutingMiddlewareSubstituteBindings::class,

    ],

];

登入後複製

這將確保在每個請求期間都可以使用Sanctum的基於Cookie的身份驗證。

  1. 接下來,需要設定auth設定檔。

開啟config/auth.php文件,找到defaults和guards並將它們配置為使用sanctum。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

// config/auth.php

 

'defaults' => [

    'guard' => 'api',

    'passwords' => 'users',

],

 

'guards' => [

    'web' => [

        'driver' => 'session',

        'provider' => 'users',

    ],

 

    'api' => [

        'driver' => 'sanctum',

        'provider' => 'users',

        'hash' => false,

    ],

],

登入後複製

這將允許我們使用Sanctum進行基於Token的身份驗證。

  1. 新增Sanctum提供者。

如果您使用的是新版本的Laravel,則不需要新增提供者。如果您使用的是舊版本,請開啟config/app.php檔案並在providers陣列中新增以下行:

1

LaravelSanctumSanctumServiceProvider::class,

登入後複製

四、建立授權令牌

現在,我們已經設定了Laravel Sanctum,接下來我們將了解如何使用Sanctum來建立授權令牌。

  1. 在使用者登入後,在users表中為該使用者建立一個API令牌。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public function createToken(Request $request)

{

    $user = Auth::attempt(['email' => $request->input('email'), 'password' => $request->input('password')]);

 

    if($user) {

        $token = $user->createToken('API Token')->plainTextToken;

         

        return response()->json([

          'token' => $token,

        ]);

    } else {

        return response()->json([

          'message' => 'Invalid credentials',

        ], 401);

    }

}

登入後複製
  1. 建立令牌後,您可以將其新增至每個要求的Authorization標頭。可以在axios請求中如下設定:

1

axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;

登入後複製

五、實現API身份驗證和授權

在創建了授權令牌後,我們可以使用Sanctum來保護API端點免受未經授權的存取。我們可以使用Laravel路由中間件來檢查認證令牌並拒絕未經授權的存取。

  1. 首先,在api.php檔案中定義受保護的API路由。

1

2

3

4

5

// routes/api.php

 

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {

    return $request->user();

});

登入後複製

此路由將使用Sanctum auth中介軟體保護。

  1. 接下來,存取受保護的路由並查看結果。可以透過以下命令進行測試:

1

php artisan serve

登入後複製

現在,可以存取 /api/user 路由以查看已登入的使用者的詳細資訊。現在,如果沒有授權標頭,將不會能夠存取它並傳回401未經授權的HTTP狀態碼。

六、結尾

Laravel Sanctum是一個強大且易於使用的身份驗證和授權解決方案,可以在Laravel Web應用程式和Web API中輕鬆實現身份驗證和授權。它可以輕鬆地保護您的API端點免受未經授權的訪問,並使您可以輕鬆控制哪些使用者可以存取哪些API端點。在這篇文章中,我們學習如何安裝和設定Laravel Sanctum,並了解如何使用它來建立授權令牌和實作API身分驗證和授權。

以上是Laravel開發:如何使用Laravel Sanctum實現API身分驗證與授權?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
Laravel Space/laravel-backup 無法安裝
來自於 1970-01-01 08:00:00
0
0
0
Laravel 5.1 登入 laravel 自備的 沒有啦
來自於 1970-01-01 08:00:00
0
0
0
composer安裝laravel安裝不上
來自於 1970-01-01 08:00:00
0
0
0
為什麼thinkphp比laravel效能好?
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板