使用 djoser 进行 Django ninja 令牌身份验证
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”函数中检查令牌,但我不知道如何
我的回购 (link)
所以基本上你必须扩展 Ninja 的 HttpBearer class 并实现 authenticate 方法,它将接受请求和令牌作为参数。如果用户未通过身份验证,此方法 returns 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
我已经使用 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”函数中检查令牌,但我不知道如何
我的回购 (link)
所以基本上你必须扩展 Ninja 的 HttpBearer class 并实现 authenticate 方法,它将接受请求和令牌作为参数。如果用户未通过身份验证,此方法 returns 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