我已经实现了一个授权的操作,就像this question中解释的那样,以及@vdebergue给出的答案。
这工作得很好,前端应用程序发出的请求自动添加了一个X-XSRF-TOKEN请求头,其中包含从登录响应中获得的令牌。
但是,在部署前端和后端后,从浏览器发出的请求不再添加X-XSRF-TOKEN请求标头,从而导致来自服务器的未经授权的响应(理所当然)。
我不能理解的是,在开发和部署之间发生了什么变化?
我在cors.allowedHttpHeaders中指定了请求头:
play.filters.cors.allowedHttpHeaders = ["Accept", "Origin", "Content-Type", "X-XSRF-TOKEN"]我怀疑我必须从React手动添加这个头(事实上,这个问题可能与前端无关)。
谢谢!
编辑1:
XHR请求列表:

登录POST请求的详细信息,可以看到X-XSRF cookie和正在传递的令牌:

未将X-XSRF设置为请求标头的未授权GET的详细信息:

与之前的截图相同,但在localhost上运行,通过添加标题获得授权:

发布于 2018-02-05 13:34:10
假设您正确实现了cookie,并且在部署过程中没有附加cookie,则该问题可能与cookie的域有关。我这样做的方式是定义一个环境变量,并使用它来保存域值;这样就不会在开发和测试期间破坏实现。
您可以查看Playframework API documentation,了解有关如何使用cookie的更多信息。
发布于 2018-02-14 14:04:34
解决了一个非常规的问题:前端是用react制作的,它提供了一种构建static生产版本的方法。
我只是简单地将这些静态文件与play框架的index.scala.html集成在一起,而不是试图在不同的端口上将其作为单独的应用程序运行。
它可以工作,但我不会将其标记为最佳答案,因为我不知道连接到相同play框架后端的移动应用程序在授权和cookie方面是否会很好地发挥作用。移动应用程序不是浏览器(并且可能不遵守它们的限制),Postman对cookie没有任何问题。
接受检查。
https://stackoverflow.com/questions/48613590
复制相似问题