Django & React 中的 API 安全问题 - Django 可以验证 API 中的用户 id == 令牌中的用户身份吗?



在Django的views.py中,我有以下代码:

class MutatieView(viewsets.ModelViewSet):
# authentication_classes = (TokenAuthentication,)
authentication_classes = (JWTAuthentication,)
permission_classes = (IsAuthenticated,)
serializer_class = MutatieSerializer
queryset = Mutatie.objects.all()
def get_queryset(self, **kwargs):
user_mutatie = Mutatie.objects.filter(userid=self.kwargs['userid'])
return user_mutatie

在React中,发送GET请求时在标头中使用正确的令牌。但我注释掉了原始行(见下文(,并请求userid=1,而不是将userid作为当前用户的变量,即2。

export const apiSlice = createApi({
reducerPath: "api",
baseQuery: fetchBaseQuery({
baseUrl: "http://127.0.0.1:8000/api/",
prepareHeaders: (headers, { getState }) => {
const access = (getState() as RootState).auth.access
if (access) {
headers.set('Authorization', `Bearer ${access}`);
}
return headers
},
}),
tagTypes: ['MyMutatie',],
endpoints: (builder) => ({   
...
myMutatieList: builder.query<IMutatie[], number>({
query: (userid:number) => ({
url: `mutaties/1/`,
// url: `mutaties/${userid}/`,
}),
providesTags: ['MyMutatie']
}),
...
}),       

});

现在我将user1的数据作为user2,这是一个问题。

Django应该能够在令牌中看到正确的userid=2而不是1如何实现这样的验证

开发人员是唯一一个像上面代码中那样操作api调用的人,还是有其他方法?在poster中,但是django只允许来自给定域的API?这也是伪造的吗?

您不需要将userid作为URL参数发送,Django身份验证中间件将为您解决此问题。用途:

user_mutatie = Mutatie.objects.filter(userid=self.request.user.id)

对于django only allows APIs from the given domain,您可以在ALLOWED_HOSTS中添加域。

最新更新