在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
中添加域。