我已经实施了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上运行,获得了添加标题的授权:
答案 0 :(得分:0)
假设您已正确实施,并且在部署期间未附加Cookie,则问题可能与您的Cookie的 域 有关。我这样做的方法是定义一个env变量并用它来保存域值;所以它不会破坏开发和测试期间的实现。
您可以查看Playframework API documentation,了解有关如何使用Cookie的更多信息。
答案 1 :(得分:0)
解决了一个非传统的问题:前端是用反应制作的,这提供了一种构建静态制作版本的方法。
我只是将这些静态文件与play framework的index.scala.html集成在一起,而不是尝试将其作为另一个端口上的单独应用程序运行。
它有效,但我不会将其标记为最佳答案,因为我不知道连接到同一播放框架后端的移动应用程序是否会在授权和cookie方面很好地发挥作用。移动应用程序不是浏览器(可能不遵守它们的限制),Postman没有cookie问题。
待检查。