在 Django 中比较 owner_id 和 request.user.id 进行身份验证是否安全?

is it safe to compare owner_id to request.user.id for authentication in django?

在我的应用程序中我有模型:

class Meal(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField(max_length=500)
    carbohydrates = models.FloatField()
    protein = models.FloatField()
    fat = models.FloatField()
    fiber = models.FloatField()
    owner = models.ForeignKey('auth.User', on_delete=models.CASCADE)

以下序列化程序:

class MealSerializer(serializers.ModelSerializer):
    class Meta:
        model = Meal
        fields = "__all__"

和这个视图集:

class MealViewSet(viewsets.ModelViewSet):
    queryset = Meal.objects.all()
    serializer_class = MealSerializer
    
    def get_queryset(self):
        return Meal.objects.filter(owner_id=self.request.user.id)

现在我有一个问题,在 get_queryset 方法中比较 owner_id=self.request.user.id 是否安全?

或者是否有可能以某种方式在请求中指定 user.id 例如使用邮递员并拉取所有 Meal 对象?

例如: Is that possible in postman or somewhere else?

我是django初学者,很少用postman。对不起,如果我写错了,英语不是我的母语。

我不确定它是否有效。在过滤器中,你必须写 owner=self.request.user (首选且安全)。或者,如果您真的想为 ID 烦恼:owner__id=self.request.user.id.

深入 self.request.user 字段有点危险,因为万一某些 未经身份验证的 用户到达那里 — 您的代码会崩溃。

总之,总体上比较安全。之前有人问过这个问题:Django/Auth: Can request.user be exploited and point to other user?