了解如何使用multer进行文件上传来解决Node.js应用程序中的“无效CSRF令牌”问题。本指南提供了一个带代码示例的分步解决方案。 --- This video is based on the question https://stackoverflow.com/q/67072706/ asked by the user 'Hussain Shaikh' ( https://stackoverflow.com/u/5234084/ ) and on the answer https://stackoverflow.com/a/67073345/ provided by the user 'O. Jones'(https://stackoverflow.com/u/205608/)在“堆栈溢出”网站上。感谢这些出色的用户和Stackexchange社区的贡献。请访问这些链接以获取原始内容和更多详细信息,例如替代解决方案,有关主题,评论,修订历史记录等的最新更新/开发。 by-sa 4.0'(https://creativecommons.org/licenses/by-sa/4.0/)许可证和原始答案帖子在“ cc by-sa 4.0'(https://creativecommons.org/licenses/licenses/licenses/by-sa/4.0/)下获得许可。如果您似乎有什么事,请随时用vlogize [at] gmail [dot] com写信给我。 ---在开发Web应用程序时,请了解Node.js中的CSRF代币错误无效,确保表单和文件上传的安全性至关重要。开发人员面临的一个常见问题是无效的CSRF代币错误。在向您的服务器提出异步请求时,通常会出现此错误,并且表示服务器由于授权令牌不匹配而拒绝了传入的请求。在本指南中,我们将探讨为什么在带有Multer的Node.js环境中发生这种情况以及如何有效解决它。在您的方案中,您正在使用fetch()通过HTML表单上传文件。虽然表格可以使用普通的POST请求成功提交数据,但在异步尝试期间它失败了。服务器发出了一条错误消息,指示无效的CSRF令牌。让我们解决这个问题:CSRF令牌:跨站点请求伪造(CSRF)令牌是安全凭证,有助于防止未经授权的命令。您的服务器期望任何发布请求有效令牌,尤其是对于文件上传之类的操作。表单配置:您已经设置了具有CSRF保护的表单,但是对服务器的Fetch()请求不包括必要的CSRF令牌,从而导致服务器拒绝该请求。在粘附在CSRF保护的同时,成功执行异步文件上传的解决方案,请按照以下概述的步骤:步骤1:修改HTML表单,请确保您的HTML表单正确地包括CSRF代币。您表格中需要提交的每个输入都应具有名称属性。这允许服务器通过请求发送时识别它们。以下是您修改的表格应如何看:[[请参阅视频以显示此文本或代码段]]步骤2:接下来更新JavaScript获取请求,从您的表单中检索CSRF令牌,然后在发送请求之前将其附加到FormData对象。这是您的JavaScript代码的更新版本:[[请参阅视频显示此文本或代码段]]步骤3:服务器端配置确保设置服务器以正确验证CSRF代币。这是关键部分的概述:CSRF中间件设置:确保使用CSURF中间件。会话管理:CSRF代币取决于会话管理,应在您的node.js设置中正确配置。令牌检索:使用res.locals.csrftoken为每个会话生成一个唯一的令牌并形成渲染。 [[请参阅视频以显示此文本或代码段]]步骤4:提交表单时连续令牌验证,服务器检查是否_CSRF令牌发送了带有请求的_CSRF令牌是否匹配了用户会话中存储的一个。如果他们匹配,则可以进行动作;如果没有,服务器将拒绝该请求,从而防止潜在的CSRF攻击。结论将CSRF代币纳入文件上传过程对于确保您的Web应用程序至关重要。通过遵循上面概述的步骤,您可以有效地解决无效的CSRF代币错误,同时确保数据保持安全和安全。始终记住要维护适当的会话管理并验证客户端和服务器侧的令牌。愉快的编码!