Django Rest中的自定义授权



我只是Django、python的新手。我尝试构建一个简单的API集合,包括CRUD基本,以及身份验证、授权。

我有1个简单的意见,如:

@api_view(['GET'])
@permission_classes([IsUser])
def get_test(request : Request):
return JsonResponse({"message": "success"}, status = status.HTTP_200_OK)

IsUser是:

class IsUser(IsAuthenticated):
def has_permission(self, request : Request, view):
token = request.query_params.get('token')
if token:
role = jwt.decode(token.split(" ").__getitem__(1), key="secret_key",algorithms="HS256").get('role')
if role == 'User':
return True
else:
return False
return False

我的目的是解析JWT令牌并在此基础上进行授权。我不知道我的方式是否真的正确?有人能给我一些意见和文件来更好地理解这个问题吗?我不使用任何其他lib,因为一开始我想自己编写代码来理解流。

谢谢你帮我。

如果您使用DRF的默认JWT身份验证,则权限类IsAuthenticated将为您验证令牌,而不是在查询参数中指定令牌,而是在标头中指定。

但是,如果您希望允许特定类型(角色(的用户访问您的端点。然后创建BasePermission类的子类,如示例所示。

然后简单地在@permission_classes([IsUser & IsAuthenticated])中添加IsAuthenticated使其工作。

同样,只有当您使用默认的Group模型时,这才会起作用。

以下是如何导入from django.contrib.auth.models import Group

from rest_framework.permissions import BasePermission
USER = 'USER'
class IsUser(BasePermission):
def has_permission(self, request, view, user=None):
if not user:
user = request.user
return USER in [role.name for role in user.groups.filter()]

最新更新