Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有ReactJS客户端的ExpressJS API服务器_Reactjs_Api_Express_Jwt - Fatal编程技术网

带有ReactJS客户端的ExpressJS API服务器

带有ReactJS客户端的ExpressJS API服务器,reactjs,api,express,jwt,Reactjs,Api,Express,Jwt,我正在开发一个网站,它使用ExpressJS作为API提供数据,并为客户端提供ReactJS。我理解这在理论上是如何工作的,在某种程度上,它在技术上是如何工作的,但我想确保我按照预期的方式做事 我的API服务器将提供一些公共和私人数据。对于私有,它需要身份验证(用户/通过API传递/login路由)。所以,如果我想在API上加载/profile,我需要经过身份验证的用户。我使用我的中间件来实现这一点,该中间件包含在我的Express route for/profile中。React在我的/log

我正在开发一个网站,它使用ExpressJS作为API提供数据,并为客户端提供ReactJS。我理解这在理论上是如何工作的,在某种程度上,它在技术上是如何工作的,但我想确保我按照预期的方式做事

我的API服务器将提供一些公共和私人数据。对于私有,它需要身份验证(用户/通过API传递/login路由)。所以,如果我想在API上加载/profile,我需要经过身份验证的用户。我使用我的中间件来实现这一点,该中间件包含在我的Express route for/profile中。React在我的/loginAPI路由上发送POST请求后,我验证用户/密码,然后以用户和电子邮件作为有效负载生成JWT令牌(但不是密码)

现在是我被卡住了(安全方面)。我希望我的ReactJS能够显示来自API服务器的数据,一旦用户登录,他应该能够访问任何其他受保护的路由。我在React中创建登录组件或使用它获取数据都没有问题。我的问题是,一旦用户使用ReactJS(使用输入表单)登录,并且他获得了签名的JWT令牌(我稍后将其保存在localStorage中),是否可以使用令牌负载中解码的用户部分来调用我在服务器端(Express)上需要的方法和函数,而不验证每个路由调用的用户/传递?这是安全方面的明智之举吗?我假设是这样的,因为JWT是用唯一的密钥签名的,即使它们存储在localStorage中并且可以访问,但是如果API服务器没有注意到(在验证期间),它们也不能被修改。通常,使用Express only解决方案时,我会将每个用户的会话存储在DB中,并不断检查保存在cookie中的客户端会话,但这有点不同,而且容易混淆

我想我的简短问题是-如何在ExpressJS后端和ReactJS前端之间进行正常的安全用户身份验证?关于其他信息,MyAPI还具有CRUD函数(用于添加/更改数据的端点)。我想如果有人可以确认我是否做的事情是正确的,如果没有指向我的资源,我可以找到更多的信息。如果可能的话,我希望避免使用第三方身份验证服务


另外,我在stackoverflow和互联网其他角落阅读了无数其他帖子,但我真的找不到我要找的内容。

你的问题很长。请缩短时间基本上我对“Express->JWT->React”用户身份验证不安全。答:我不确定使用JWT解码的有效负载是否足够安全,以便以后针对Express端点使用。我在最后一段中也说过,我正在寻找一种安全实用的方法来验证React to Express中的用户。@MerkisL,如果你缩短你的问题,让它不那么令人困惑,那么你得到答案的机会会大大增加,请直接问到底。这就是jsDevia的建议。而且,您没有您尝试过的代码。最后,对于受保护的路由,您可能需要一个中间件,您可以编写自己的中间件。