簡體   English   中英

Django 忍者令牌認證與 djoser

[英]Django ninja token authentication with djoser

我已經使用 Django Ninja 框架實現了 CRUD,但是現在我想在我的應用程序中進行身份驗證,我已經安裝並配置了 Djoser,所以現在我可以生成令牌,但我不知道如何在我的 CRUD 中進行驗證

class AuthBearer(HttpBearer):
    def authenticate(self, request, token):
        if token == "supersecret":
            return token

@api.get("/bearer", auth=AuthBearer())
def bearer(request):
    return {"token": request.auth}

我應該能夠檢查“AuthBearer”function 中的令牌,但我不知道如何

我的回購( 鏈接

所以基本上你必須擴展 Ninja 的 HttpBearer class 並實現身份驗證方法,它將接受請求和令牌作為參數。 如果用戶未通過身份驗證,此方法返回 None ,如果用戶通過身份驗證,則將在 request.auth 中填充一個字符串。 通常此字符串將是用戶名,因此您可以在所有端點中使用它。 像這樣的東西(我使用 PyJWT 進行令牌解碼):

import jwt
from ninja.security import HttpBearer

class AuthBearer(HttpBearer):
    def authenticate(self, request, token):
        try:
            #JWT secret key is set up in settings.py
            JWT_SIGNING_KEY = getattr(settings, "JWT_SIGNING_KEY", None)
            payload = jwt.decode(token, JWT_SIGNING_KEY, algorithms=["HS256"])
            username: str = payload.get("sub")
            if username is None:
                return None
        except jwt.PyJWTError as e:
            return None

        return username

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM