我无法找到使用Auth0的M2M令牌客户端证书流程流程集成工作POST请求提交的任何解决方案,无法从React前端向Django后端提交POST条目。
我目前完全基于以下设置进行了设置,其中Auth0已完全集成:
前端:
后端:
以上设置当前可以在没有任何Auth0实现的情况下正常运行,随后可以处理GET数据请求。但是,当我尝试发出POST数据请求时,该问题终于在最近弹出。
我确实意识到,根据我的设置,
在将有效的POST请求提交集成到Django后端时,我找不到任何解决方案。
let getBackendConfig = {
headers: {
"Content-Type": "application/json",
Authorization: process.env.REACT_APP_JWT_AUTH0_HEADER + " " + auth0Token,
},
};
async function submitLocationViaPOST( dataToPOST ) {
setIsLocationUploaded("process");
try {
Promise.all([
await axios
.post(urlSubmitLocationPOSTAPI, dataToPOST, getBackendConfig)
.then(response => {
console.log("? urlSubmitLocationPOSTAPI Reply Data: ", response);
if (response.status === 201) {
// EXECUTE ONLY IF RESPONSE IS "201" --- MEANING ENTRY CREATED SUCCESSFULLY
setIsLocationUploaded("finish");
}
})
]);
}
catch (err) {
setIsLocationUploaded("error");
console.log("? urlSubmitLocationPOSTAPI Error: " + err);
}
}
我目前确实知道,如果没有任何Auth0身份验证,则当前的所有POST请求都将有效。
上面的代码是POST请求代码的示例,该代码先前在没有Auth0的情况下工作,并且在实施Auth0时突然引发了500错误,大概是抛出500错误是因为JWT身份验证配置可能被错误编码。我希望有人可以帮助查明我可以进行的潜在代码更改,以尝试通过Auth0 POST请求提交来纠正它:
希望能收到可以解决此问题的人的回音。提前非常感谢您的帮助!
答案 0 :(得分:0)
经过7天的测试后,我便进行了一系列尝试和测试,并找到了可行的工作答案。希望该解决方案可以在此过程中对其他人有所帮助。
但是,在此时此刻,我不得不说我只成功进行了1-3次测试,而该解决方案尚未经过严格测试。但是到目前为止,它可以完成所有的测试。
基本上,这是一些关键指标:
要注意的示例样本键代码:
A。前锋---反应
// HANDLES "POST" REQUESTS CONFIGS
let postBackendConfig = {
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Authorization: process.env.REACT_APP_JWT_AUTH0_HEADER + " " + auth0Token,
},
};
B。后端--- DJANGO REST FRAMEWORK
views.py
@csrf_exempt
@permission_classes((IsAuthenticated, ))
@authentication_classes((JSONWebTokenAuthentication,))
def newsubmission(request):
if request.method == 'POST':
data = JSONParser().parse(request)
serializer = SubmissionsSerializer(data=data)
if serializer.is_valid():
submitted = serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
要记录的最后一个关键项是发送/接收授权标头,这对于确保所有这些代码也能正常工作至关重要。
以下是您查看自己的代码的示例,因为它是个人在使用JWT令牌时面临的常见问题之一。我相信只要两端相同,无论是“ JWT”还是“ Bearer”,它仍然可以工作,但是强烈建议仅使用“ JWT”或“ Bearer”作为您的选择:
A。前锋---反应---发件人授权标头
Authorization: "JWT " + auth0Token,
B。后端--- DJANGO REST FRAMEWORK ---接收器授权标头
settings.py
# JWT settings
JWT_AUTH = {
...
'JWT_AUTH_HEADER_PREFIX': "JWT",
...
}
我还要感谢@Dan Woda以前提供的帮助。