溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Laravel中Token的實現機制是什么

發布時間:2023-05-18 11:47:43 來源:億速云 閱讀:178 作者:iii 欄目:編程語言

這篇文章主要介紹“Laravel中Token的實現機制是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Laravel中Token的實現機制是什么”文章能幫助大家解決問題。

一、令牌的概念

Token,顧名思義,就是指一種令牌,是一種標記,可以代表某種身份信息或者授權信息。它通常由服務器產生并發放給客戶端,客戶端收到令牌后將其存放在本地,在后續請求時加入請求頭或者請求參數中,作為身份驗證或授權的標識。服務器通過檢查令牌是否有效,就可以確定請求是否具有身份驗證或者授權信息。

令牌的使用能夠更有效地保護Web應用免受未經授權的訪問,尤其是在API和Web服務中,令牌是必不可少的。

二、 Laravel Token的實現

Laravel作為一款優秀的Web應用框架,在其內置的Auth功能中提供了Token的支持。在Laravel中,Token的實現使用了Laravel Sanctum這個擴展包。

2.1 Laravel Sanctum

Laravel Sanctum是一款輕量級的身份驗證包,可以為Laravel應用程序提供API身份驗證,基于API秘鑰或者Token,讓應用程序更好的運行在無狀態環境中,如SPA應用程序、單頁應用程序和移動應用程序等。Laravel Sanctum提供了以下功能:

  1. 無需配置即可開始使用;

  2. 支持使用session、Token以及API秘鑰等多種身份驗證方式;

  3. 內置了多種身份驗證的實現,如cookie、Token、auth等;

  4. 提供了方便的身份驗證和Token生成;

  5. 更好的自定義身份驗證流程。

2.2 Token的實現原理

在Laravel Sanctum中,Token的實現原理與session實現原理類似。在請求中,客戶端向服務器發出請求時,將Token作為請求參數或Header中的Authorization字段發送給服務器。服務器在檢查Token是否有效,并在有效期內,給予請求操作的權限或者返回錯誤信息。Token的實現流程如下:

  1. 創建Token:當用戶登錄時,Sanctum將為該用戶生成一個隨機的Token,并將該Token保存在后臺數據庫中;

  2. 發送Token:將Token作為請求參數或者Header中的Authorization字段發送給服務器;

  3. Token驗證:在服務器端,Sanctum將檢查接收到的Token是否有效,并決定授權或拒絕;

  4. Tokens管理:Sanctum提供了一系列API來創建、撤銷、查找和驗證Token。

三、 Laravel Token的使用

Sanctum提供了方便易用的API來使用Token,包括Token的創建、撤銷、查找和驗證等。下面是Token的使用方式:

3.1 安裝 Sanctum

在應用程序中,首先需要將Sanctum的依賴包引入到應用的composer.json文件:

composer require laravel/sanctum

安裝完成后,需要在config/app.php文件中添加如下配置:

'providers' => [ 
    // Other service providers... 
    Laravel\Sanctum\SanctumServiceProvider::class, 
],

3.2 發布配置

在安裝完成后,需要運行以下命令來發布Sanctum的配置文件:

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

3.3 配置Middleware

在使用Sanctum時,需要在對應的路由中添加中間件。在Laravel中,已經內置了API認證的中間件,可以直接調用。

3.4 創建Token

在登錄后,可以使用如下代碼來為當前用戶創建Token:

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Hash; 
use Illuminate\Validation\ValidationException; 
use App\Models\User; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Route; 

// 創建Token 
Route::post('/api/token/create', function (Request $request) { 
    $request->validate([ 
        'email' => 'required|email', 
        'password' => 'required', 
    ]); 

    $user = User::where('email', $request->email)->first(); 

    if (! $user || ! Hash::check($request->password, $user->password)) { 
        throw ValidationException::withMessages([ 
            'email' => ['The provided credentials are incorrect.'], 
        ]); 
    } 

    return $user->createToken($request->header('User-Agent'))->plainTextToken; 
});

在上面的代碼中,可以看到在創建Token時,使用機器的User-Agent作為額外的參數。這里的User-Agent是一個HTTP頭,記錄了瀏覽器或應用程序的相關信息。這個信息將作為Token的一部分,使得Token一旦被盜用或者惡意使用,可以很容易地發現和撤銷。

3.5 撤銷Token

創建的Token一旦被盜用或者失效,可以使用如下代碼撤銷:

Auth::user()->tokens()->delete();

3.6 驗證擴展

Sanctum還提供了良好的驗證擴展,可以方便地進行訪問控制,代碼如下:

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Hash; 
use Illuminate\Validation\ValidationException; 
use App\Models\User; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Route; 
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable 
{
    use HasApiTokens, Notifiable;
}

使用上述代碼之后,我們就可以在User模型中使用can接口來進行訪問控制,代碼如下:

$request->user()->can('update', $post);

在上面的代碼中,can將根據當前用戶的角色、權限和策略,判斷用戶是否有權進行更新操作。需要注意的是,用戶需要正確實現自己的訪問控制邏輯。

關于“Laravel中Token的實現機制是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女