編寫自定義身份驗證
來自 django.contrib.auth.models 從 rest_framework 匯入使用者從 rest_framework 匯入例外匯入例外
此示例身份驗證直接來自此處的官方文件。
class ExampleAuthentication(BaseAuthentication):
def authenticate(self, request):
username = request.META.get('X_USERNAME')
if not username:
return None
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
raise AuthenticationFailed('No such user')
return (user, None)
自定義身份驗證類有四個部分。
- 從`from rest_framework 中提供的 BaseAuthentication 類擴充套件它。身份驗證匯入 BaseAuthentication
- 有一個名為
authenticate
的方法,以request
為第一個引數。 - 返回(使用者,無)元組以進行成功的身份驗證。
- 為失敗的身份驗證引發
AuthenticationFailed
異常。這在 rest_framework.authentication 中可用。
class SecretAuthentication(BaseAuthentication):
def authenticate(self, request):
app_key = request.META.get('APP_KEY')
app_secret = request.META.get('APP_SECRET')
username = request.META.get('X_USERNAME')
try:
app = ClientApp.objects.match_secret(app_key, app_secret)
except ClientApp.DoesNotExist:
raise AuthenticationFailed('App secret and key does not match')
try:
user = app.users.get(username=username)
except User.DoesNotExist:
raise AuthenticationFailed('Username not found, for the specified app')
return (user, None)
當未經身份驗證的請求被拒絕訪問時,身份驗證方案將返回 HTTP 403 Forbidden 響應。