Auth0:如何使用带有REACT前端的M2M令牌提交帖子 [英] Auth0: How to Submit POST Using M2M Token with React Frontend
本文介绍了Auth0:如何使用带有REACT前端的M2M令牌提交帖子的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我找不到任何类型的解决方案,无法使用AUTHO的M2M令牌客户端凭据流流程集成正在工作的POST请求深渊翻滚,以便将POST条目从我的Reaction前端提交到我的Django后端。
我目前已经完全基于以下折衷的设置构建,Auth0在某种程度上完全集成了:
前端:
- 响应浏览器安装程序进行POST以通过Auth0服务器检索AUTH0令牌。
- 使用基于JWT身份验证检索到的M2M令牌对浏览器安装进行反应,以向后端执行GET请求以获取数据。
后端:
- Django后端安装程序使用GET请求验证M2M令牌以释放数据。
上述设置目前最初在没有任何Auth0实现的情况下工作,随后使用GET DATA请求工作。但是,最近当我尝试发出POST数据请求时,问题终于出现了。
我确实意识到,根据我的设置,
- 根据Reaction请求代码,
- 通过M2M安装程序检索到的令牌
我找不到任何将正在工作的请求后深渊翻滚集成到我的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请求将会正常工作。
上述代码是一个示例请求后代码,说明以前在没有Auth0的情况下工作,并在实现Auth0时突然抛出500错误,当时抛出的500错误可能是JWT身份验证配置可能编码错误。我希望有人能帮我找出我可以做的潜在代码更改,尝试更正它以通过Auth0 POST请求深渊翻滚工作:希望收到可以在此问题上提供帮助的人的反馈。非常感谢您的帮助!
推荐答案
只是对我的方法进行了一些试验和测试,经过7天的测试,我找到了一个可行的工作答案。希望这个解决方案可以帮助这个过程中的其他人。
但是,在这一点上,我不得不说我只进行了1-3次成功的测试,并且该解决方案没有经过严格的测试。但到目前为止,它解决了每一项测试的问题。基本上,以下是一些关键提示:
- POST请求提交可以通过使用JWT令牌,只是有一个非常具体的方法可以使其正常工作。
- 在基于Django睡觉框架的服务器中使用类在启用‘PERMISSION_CLASSES((IsAuthenticated,))’和‘authentication_classes((JSONWebTokenAuthentication,)’时不起作用,但如果您在后端使用Django时禁用它们,则会起作用。
- 在views.py中使用API_VIEW代码将是允许同时启用"PERMISSION_CLASS((IsAuthenticated,))"和"‘authentication_classes((JSONWebTokenAuthentication,")的有效解决方案。
- 在使用AXIOS或FETCH的带有Reaction前端的发送请求中,在POST请求头中包含"Content-Type":"application/x-www-form-urlencode"而不是"Content-Type":"application/json"似乎非常有效。
要注意的示例按键代码示例:
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.后台-姜戈睡觉框架
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"还是"持有者",还是可以的,但强烈建议您只使用"JWT"或"持有者"中的一种作为您的选项:A.前端-Reaction-发件人授权头
Authorization: "JWT " + auth0Token,
B.后台-姜戈睡觉框架-接收方授权头
settings.py
# JWT settings
JWT_AUTH = {
...
'JWT_AUTH_HEADER_PREFIX': "JWT",
...
}
我还要感谢@Dan Woda之前提供的帮助。
这篇关于Auth0:如何使用带有REACT前端的M2M令牌提交帖子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文