我目前有一个使用 React Native 制作的移动应用程序以及一个使用 Symfony 制作的 API,这要归功于 API Platform。
两个应用程序之间的通信良好。
为了在应用程序上创建通知系统,我添加并配置了 Mercure 服务器。
但是,自添加 Mercure 以来,API 和应用程序之间似乎存在通信问题。
我想澄清一下,我通过 reactjs 中的 web 项目测试了完全相同的配置,并且我没有问题。
因此,我怀疑 Mercure 和应用程序之间存在访问问题。(我使用 expo 在本地测试我的应用程序)
这是我的 symfony .env 文件
MERCURE_URL=http://127.0.0.1:3000/.well-known/mercure
MERCURE_PUBLIC_URL=http://127.0.0.1:3000/.well-known/mercure
MERCURE_PUBLISH_URL=http://127.0.0.1:3000/.well-known/mercure
MERCURE_JWT_SECRET=mykeyp
MERCURE_PUBLISHER_JWT_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InB1Ymxpc2giOlsiKiJdfX0.Gvmkhs_Nx9S7yNyNs_TUghfcruiNrNKQBA0D36cGQSA
MERCURE_SUBSCRIBER_JWT_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InB1Ymxpc2giOlsiKiJdfX0.Mzezd1YtkgCmlEDQg4qwNCFql1JXCXk1Vg-tB8UHgSk
这是用于启动 Mercure 服务器的命令
SERVER_NAME=:3000 MERCURE_PUBLISHER_JWT_KEY="mykeyp" MERCURE_SUBSCRIBER_JWT_KEY="mykeys" ./mercure/mercure run -config mercure/Caddyfile.dev CORS_ALLOWED_ORIGINS=https://localhost:8000
我正在使用 ngrok 通过我的移动应用程序联系我的 API。我还尝试在端口 3000 上运行 ngrok 以通过应用程序联系 Mercure,但我仍然遇到此错误:401 UnAuthorized。
这是我的js代码
const uri = encodeURIComponent(`${api_address}/api/users/3`);
const eventSource = new RNEventSource(`${mercure_address}/.well-known/mercure?topic=${uri}`);
eventSource.addEventListener('message', (event) => {
let data = JSON.parse(event.data);
console.log(data)
}
)
我还指定 Symfony 在端口 8000 上启动,Mercure 在端口 3000 上启动。
提前致谢