AccessToken、for_user、get_token

城南城南發表於2023-05-15

在Django REST framework的SimpleJWT庫中,AccessToken是一個類,用於表示一個JSON Web Token (JWT)中的訪問令牌部分。訪問令牌是一種常見的身份驗證令牌,通常用於保護API端點。

透過SimpleJWT庫,您可以使用AccessToken類建立、解析和驗證JWT,以實現安全的身份驗證和授權機制。訪問令牌可以包含有關使用者或會話的資訊,以及與該令牌相關的許可權和有效期資訊。

具體來說,AccessToken類具有以下作用:

  1. 建立:可以使用AccessToken.for_userAccessToken.for_token方法建立一個新的訪問令牌。for_user方法建立一個針對指定使用者的新訪問令牌,而for_token方法將現有的訪問令牌字串轉換為AccessToken例項。

  2. 解析:可以使用AccessToken.decode方法將JWT字串解碼為AccessToken例項。解碼後,您可以使用訪問令牌中包含的資訊驗證使用者身份和許可權。

  3. 驗證:AccessToken類提供了幾種驗證方法,例如verifyverify_exp方法,用於確保訪問令牌在有效期內且未被篡改。這些方法可以幫助您構建可靠的身份驗證和授權機制,以保護API端點。

總之,AccessToken類是實現安全身份驗證和授權機制的重要元件,使得您可以建立、解析和驗證JWT,以及管理訪問令牌相關的許可權和有效期資訊。

 

 

在Django REST framework的SimpleJWT庫中,AccessToken.for_user是一個方法,用於建立一個針對指定使用者的新訪問令牌(JSON Web Token,JWT)。

AccessToken.for_user方法接受一個Django使用者模型(User)例項作為輸入,並返回一個新的AccessToken例項。使用該方法可以為特定使用者建立一個新的JWT,其中包含該使用者的身份驗證資訊和其他相關資訊,例如訪問許可權、過期時間等。

以下是如何使用AccessToken.for_user方法的示例程式碼:

from django.contrib.auth.models import User
from rest_framework_simplejwt.tokens import AccessToken

# 獲取要為其生成JWT的使用者例項
user = User.objects.get(username='johndoe')

# 為使用者建立一個新的JWT
access_token = AccessToken.for_user(user)
jwt = str(access_token)

在此示例中,AccessToken.for_user方法接受User例項並建立一個新的AccessToken例項,該例項包含有關使用者身份驗證和其他資訊的有效載荷。使用str函式將訪問令牌轉換為JWT字串。

 

在Django REST framework的SimpleJWT庫中,get_tokenTokenObtainPairSerializer類提供的一個輔助函式,用於在驗證使用者憑證後生成JSON Web Token(JWT)。

get_token函式接受一個包含使用者憑證(如使用者名稱和密碼)的字典作為輸入,並使用TokenObtainPairSerializer來驗證憑證並生成JWT。JWT以字串形式返回,客戶端可以使用它來驗證未來對受保護API端點的請求。

以下是如何使用get_token函式的示例程式碼:

from django.contrib.auth.models import User
from rest_framework_simplejwt.tokens import get_token

# 獲取要為其生成JWT的使用者例項
user = User.objects.get(username='johndoe')

# 為使用者建立一個新的JWT
jwt = get_token(user)

在此示例中,get_token函式接受User例項並返回一個新的JWT字串,該字串包含有關使用者身份驗證和其他資訊的有效載荷。由於函式返回JWT字串,因此不需要像使用AccessToken.for_user方法一樣將訪問令牌例項轉換為字串。

總之,get_token函式是一個方便的函式,可用於建立新的JWT字串,而不需要顯式地建立訪問令牌例項。如果您只需要JWT字串而不需要操作AccessToken例項,則可以使用此函式來實現更簡潔的程式碼。

或者

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.tokens import AccessToken

# 建立一個包含使用者憑證的字典
user_data = {'username': 'johndoe', 'password': 'mypassword'}

# 建立一個序列化器例項並驗證使用者憑證
serializer = TokenObtainPairSerializer(data=user_data)
serializer.is_valid(raise_exception=True)

# 使用驗證後的憑證生成JWT
access_token = AccessToken.for_user(serializer.validated_data['user'])
jwt = str(access_token)

在此示例中,get_token函式並沒有直接呼叫,而是透過呼叫AccessToken.for_user方法間接呼叫的,該方法基於驗證後的使用者資料返回一個新的訪問令牌。然後使用str函式將訪問令牌轉換為JWT字串。

 

 

AccessToken.for_userget_token都是用於建立一個針對指定使用者的新訪問令牌(JSON Web Token,JWT)的函式。它們的不同之處在於返回值的型別和用法。

AccessToken.for_user返回一個AccessToken例項,需要將其轉換為JWT字串才能使用。而get_token函式直接返回一個JWT字串,因此可以直接使用。

以下是使用這兩個函式的示例程式碼:

from django.contrib.auth.models import User
from rest_framework_simplejwt.tokens import AccessToken, get_token

# 獲取要為其生成JWT的使用者例項
user = User.objects.get(username='johndoe')

# 使用AccessToken.for_user建立AccessToken例項
access_token = AccessToken.for_user(user)
jwt_1 = str(access_token)

# 使用get_token建立JWT字串
jwt_2 = get_token(user)

# 輸出結果
print(jwt_1)
print(jwt_2)

在此示例中,使用AccessToken.for_user建立access_token例項,然後使用str函式將其轉換為JWT字串。使用get_token函式直接建立JWT字串。最後,將兩個字串列印到控制檯輸出。

總之,如果您需要訪問令牌的其他屬性(例如過期時間,scopes等),則應使用AccessToken.for_user方法來建立AccessToken例項。但是,如果您只需要JWT字串,則可以使用更簡潔的get_token函式。