使用 djoser 进行 Django ninja token 身份验证

标签 django django-rest-framework djoser django-ninja

我已经使用 Django Ninja 框架实现了 CRUD,但现在我想在我的应用程序中进行身份验证, 我已经安装并配置了 Djoser,所以现在我可以生成 token ,但我不知道如何在我的 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”函数内的 token ,但我不知道如何

我的仓库 ( link )

最佳答案

所以基本上你必须扩展Ninja的HttpBearer类并实现authenticate方法,该方法将接受请求和 token 作为参数。如果用户未经过身份验证,此方法将返回 None;如果用户经过身份验证,则将在 request.auth 中填充一个字符串。通常该字符串将是用户名,因此您可以在所有端点中使用它。 像这样的东西(我使用 PyJWT 进行 token 解码):

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

关于使用 djoser 进行 Django ninja token 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70716976/

相关文章:

python - 如何在 Django 中使用配置文件注册不同类型的用户?

python - 对齐文本框 Django

Django休息框架: how to route a uuid to an associated object?

python - 如何使用 Django Rest Framework 中的 SerializerMethodField 以原始形式返回列表外键字段?

django - 注册后通过电子邮件而不是 URL 发送激活码

django - djoser 通过链接激活帐户

python - 如何使用格式化的日期时间字段获取 Django 查询集结果

python - 覆盖Django RestFramework CreateModelMixin序列化器错误消息

python - createsuperuser 在实现自定义用户后给出 KeyError

python - 在 Django 中安全地存储加密凭证