tymon/jwt-auth詳解

一、背景

tymon/jwt-auth是一個基於JWT認證和Laravel框架而開發的PHP庫,驗證JWT令牌並通過Eloquent ORM提供對數據庫支持。 JWT是在應用程序中生成,簽名,並將其用作用戶或客戶端的身份驗證標識符的 JSON 負載。

二、使用

tymon/jwt-auth是一個易於安裝和使用的庫,它可以輕鬆地為您的Laravel應用程序提供JWT認證。您需要先在您的 Laravel 應用程序中安裝 tymon/jwt-auth 包,使用 Composer,以便可以輕鬆應用 JWT 認證。

三、安裝


composer require tymon/jwt-auth
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
php artisan jwt:secret

在 config/auth.php 配置文件中配置 guards 和 providers


'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ]
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ]
],

確保在您的 User 模型中包含 JWTSubject 受到支持的接口,以便在生成JWT令牌時包括正確的所有信息。


use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements JWTSubject
{
    // ...

    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    public function getJWTCustomClaims()
    {
        return [];
    }
}

四、認證

在jwt-auth中,認證過程主要分為兩部分:生成JWT令牌和驗證JWT令牌。

1、生成JWT令牌

Successful authentication will return a token string that should be sent to the client alongside their authenticated user data. This token can be used to authenticate subsequent requests to any part of your application that requires authentication.


only(['email', 'password']);
        if (!$token = Auth::attempt($credentials)) {
            return response()->json(['message' => 'Unauthorized'], 401);
        }
        return $this->respondWithToken($token);
    }

    /**
     * 返回JWT token
     * 
     * @param string $token
     * 
     * @return \Illuminate\Http\JsonResponse
     * 
     */
    protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => auth()->factory()->getTTL() * 60
        ]);
    }
}  
?>

2、驗證JWT令牌

JWT tokens sent with requests to your application should be included in the Authorization header using the Bearer authentication scheme.


json(['users' => $users]);
    }
}  
?>

五、更多功能

1、自定義響應

可以使用JWT-auth自定義響應,只需在 config/jwt.php 配置文件中添加以下內容:


'custom' => [
    'claim_to_return' => 'value_to_return',
    'user_object' => 'App\\User',
    'some_value' => 'some_value',
],

發出響應時,JWT-auth將發布此對象:


{'some_value': 'some_value', 'claim_to_return': 'value_to_return', 'user_object': { ... }}

2、更新令牌


public function refresh() {
    $token = JWTAuth::getToken();

    try {
        $token = JWTAuth::refresh($token);
    } catch (TokenExpiredException $e) {
        throw new HttpResponseException(response()->json([
            'token_expired'
        ], $e->getStatusCode()));
    } catch (JWTException $e) {
        throw new HttpResponseException(response()->json([
            'token_invalid'
        ], $e->getStatusCode()));
    }

    return response()->json([
        'token' => $token,
        'token_type' => 'bearer',
        'expires_in' => auth()->factory()->getTTL() * 60
    ]);
}

3、各平台的Token格式


JWTAuth::fromUser($user, [
    'platform' => 'ios'
])

總結

通過學習tymon/jwt-auth和JWT認證,我們可以輕鬆實現Laravel API應用程序的身份驗證,確保在您的API應用程序中使用保護的路由時,用戶必須登錄並提供正確的憑據。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/150483.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-08 14:54
下一篇 2024-11-08 14:54

相關推薦

  • JWT驗證Token的實現

    本文將從以下幾個方面對JWT驗證Token進行詳細的闡述,包括:JWT概述、JWT驗證Token的意義、JWT驗證Token的過程、JWT驗證Token的代碼實現、JWT驗證Tok…

    編程 2025-04-29
  • JWT String Argument Cannot Be Null or Empty

    JWT(JSON Web Token)是一種用於進行身份驗證的標準。在使用JWT時,經常會遇到“JWT String Argument Cannot Be Null or Empt…

    編程 2025-04-27
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論