我尝试将 Mercure 集成到 symfony 5 项目中。还有两个麻烦。
- 我尝试将更新发送到私人,但它不起作用,但如果尝试发送到非私人一切正常。
运行美居的命令:
./bin/mercure --jwt-key='homesphere_secret_token' --addr='localhost:3000' --allow-anonymous --cors-allowed-origins='*'
.env 文件
MERCURE_PUBLISH_URL=http://localhost:3000/.well-known/mercure
MERCURE_JWT_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InB1Ymxpc2giOlsiKiJdfX0.P0f5r123SLTru4DiE4X9q0EIoKahds-nI8jpo8uKKQQ
MERCURE_SECRET_KEY=homesphere_secret_token
提供 url 和 jwt 令牌的后端
$user = $this->getUser();
$hubUrl = $this->getParameter('mercure.default_hub');
$link = new Link('mercure', $hubUrl);
$token = JWT::encode([
'mercure' => [
'publish' => [sprintf("/chat/%s", $user->getId())],
],
], $this->getParameter('mercure_secret_key'));
更新代码
$message = $serializer
->serialize(['message' => $message], 'json');
$update = new Update(
sprintf("/chat/%s", $user->getId()),
$message,
true // if false then work
);
$publisher($update);
前端部分
const hub = new URL('http://localhost:3000/.well-known/mercure');
hub.searchParams.append('topic', '/chat/1');
const eventSource = new EventSourcePolyfill(hub.href, {
'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJtZXJjdXJlIjp7InB1Ymxpc2giOlsiXC9jaGF0XC8xIl19fQ.yg3DodPjaPzWVIOhKMo30xXzS3L4oPckbL9pcA4tMck'
});
eventSource.onmessage = event => {
console.log(JSON.parse(event.data));
}
- 当前端通过更新接收消息时,下一个请求开始上升 CORS 故障 图像
有人可以帮我解决这些吗?