"Mercure、Symfony和Vue之间存在兼容性问题"
P粉023650014
P粉023650014 2023-08-26 12:58:16
[Vue.js讨论组]

我在使用vue和symfony配置mercure时遇到了问题。我正在使用附加在symfony cli中的mercure hub。在.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!"

当我在浏览器中打开symfony应用程序(例如http://localhost:8000),并在控制台中添加以下脚本进行测试:

const eventSource = new EventSource('http://localhost:8000/.well-known/mercure?topic=' + encodeURIComponent('http://example.com/books/1'));
eventSource.onmessage = event => {
    // 每次服务器发布更新时都会调用此函数
    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错误,但使用上述jwt令牌时却没有?
  2. 为什么我无法使用https来使用symfony serve?我遇到了“TransportException: fopen(): Unable to locate certificate CN”错误。

P粉023650014
P粉023650014

全部回复(1)
P粉445750942

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

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

  • .env中:MERCURE_JWT_SECRET="Secret123"
  • 启动mercure时:--jwt-key='Secret123'
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号