【问题标题】:Unable to run typesafe activator ui in cloud9无法在 cloud9 中运行类型安全激活器 ui
【发布时间】:2014-08-22 06:04:03
【问题描述】:

我无法在 cloud9 中运行类型安全激活器:

激活器页面加载正常,但随后我收到以下错误消息:

  • 在浏览器中:

"连接丢失;您需要重新加载页面或重新启动 活化剂。激活器也有可能在另一个选项卡中打开, 导致此错误。”

  • 在cloud9终端:

"!@6j9pn9913 - 内部服务器错误,用于 (GET) [/home/stream?token=cba94...64394] -> play.api.Application$$anon$1: 执行异常[[RuntimeException: Bad CSRF token for websocket]]"

关于如何解决这个问题的任何帮助?

【问题讨论】:

  • 浏览器在哪里运行,是在本地电脑上,激活器在云9虚拟机上吗?云9是如何设置的?您可能必须使用普通的 activator shell 而不是 activator ui,激活器 UI 并不是真正打算在公共互联网上可用(任何人都可以删除您的文件),但我不知道它为什么会失败方式...
  • @Havoc P - 你猜对了:浏览器在我的本地计算机上运行,​​激活器在 Cloud9 VM 上。 Cloud9 没有特殊设置,我从终端在工作区中安装了激活器。所有这些可能都不是安全的,但它只是与 scala 和 activator 一起玩。发送

标签: cloud9-ide typesafe-activator


【解决方案1】:

Activator 监听127.0.0.1,甚至不应该监听外部接口;我不完全清楚为什么你可以连接到它。

但是无论该连接如何工作,结果似乎是 CSRF 检查失败。 CSRF 检查正在检查那里的查询参数 (?token=cba94...) 是否与应该由 Activator 页面加载设置的 cookie 匹配。这表明/home/stream 请求(打开 websocket)来自具有 cookie 的页面,即来自同一个域。也许 Activator 不知道您从哪个域加载页面,因此 cookie 会丢失?只是猜测。

当 CSRF 检查失败时,websocket 将失败并导致“连接丢失”错误,尽管该错误也可能由干扰 websocket 的其他事物(例如代理和防病毒软件)引起。

您可以通过配置http.address 系统属性来解决此问题,或采取措施解决此问题:https://github.com/typesafehub/activator/blob/52012321b3a5a9f9dcf53582664e385d92763718/ui/app/activator/UIMain.scala#L130 您也可以尝试将application.defaultCookieDomain 设置为您正在使用的域(这是一个 Play 配置选项,而 Activator 的 UI 是一个 play 应用程序)。

但是:

  • 您很可能会在这种情况下发现其他错误 - 它未经测试或支持
  • 除非前面有某种经过身份验证的代理,否则它根本不安全(激活器 UI 上没有身份验证,并且 UI 有查看和删除文件的按钮等)。

当您在无头服务器上构建项目时,activator shell 命令行可能是一个更好的选择,尽管我不会说运行 UI 是 100% 不可能的 - 您也许可以让它工作。

【讨论】:

  • Tx Havoc 的答案,它肯定会帮助我找到一种方法来完成这项工作:) 为了能够从外部界面访问激活器 ui,我使用 -Dhttp.address=$IP-Dhttp.port=$PORT$IP$PORT 是指向开放外部接口的 Cloud9 环境变量。正如你提到的,我猜 Cloud9 上可能有代理或其他东西在某处干扰。尝试这个既有趣又有启发性;-)
  • Cloud9 代理将所有内容发送到后端,但实际上 cookie 域必须与 *.c9.io 工作区名称相关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 2014-01-12
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 2015-04-20
  • 1970-01-01
相关资源
最近更新 更多