0

我在使用 vue 的 symfony 下配置 mercure 时遇到问题。我正在使用附加在 symfony cli 中的美居集线器。在 .env 文件中,我将 Mercure url 更改为使用 http,因为它导致我的证书错误(由 symfony 包含)。

.env

MERCURE_URL=http://localhost:8000/.well-known/mercure
MERCURE_PUBLIC_URL=http://localhost:8000/.well-known/mercure
MERCURE_JWT_SECRET="!ChangeMe!"

当我通过在示例 http://localhost:8000 中打开 symfony 应用程序并在控制台中添加此脚本来测试它时:

const eventSource = new EventSource('http://localhost:8000/.well-known/mercure?topic=' + encodeURIComponent('http://example.com/books/1'));
eventSource.onmessage = event => {
    // Will be called every time an update is published by the server
    console.log(JSON.parse(event.data));
}

它正在工作,我可以在其他选项卡中发布一些更改。但是当我做同样的事情但在我位于 http://localhost:8080 地址的 vue 应用程序中时,它会在控制台错误中显示我:

Access to resource at 'http://localhost:8000/.well-known/mercure?topic=http://example.com/books/1' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我还有两个问题:

  1. 为什么当我将 jwt 令牌粘贴到 env 中时出现 401 错误,但上面没有这个错误?
  2. 为什么我不能在 https 中使用 symfony 服务?我收到“TransportException: fopen(): Unable to locate certificate CN”错误
4

1 回答 1

0

这是因为 CORS,因为运行 VueJS 的域与安装 Mercure 的域不同。
我将 Mercure 与 Docker compose 一起使用,但如果您从 CLI 启动它,请尝试添加--cors-allowed-origins='http://localhost:8000 http://localhost:8080'

其他问题 1:我认为,您应该在 .env 和 Mercure 配置中使用相同的秘密

  • .envMERCURE_JWT_SECRET="Secret123"
  • 当你开始美居时:--jwt-key='Secret123'
于 2021-07-28T10:54:09.253 回答