使用Djoser进行Django忍者令牌身份验证

2eafrhcq  于 2022-12-14  发布在  Go
关注(0)|答案(1)|浏览(210)

我已经使用Django Ninja框架实现了CRUD,但现在我希望在我的应用中使用auth,我已经安装并配置了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

lsmepo6l

lsmepo6l1#

所以基本上你必须扩展Ninja的HttpBearer类并实现authenticate方法,它将接受request和token作为参数。如果用户没有通过身份验证,这个方法返回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

相关问题