1

我尝试将 Mercure 集成到 symfony 5 项目中。还有两个麻烦。

  1. 我尝试将更新发送到私人,但它不起作用,但如果尝试发送到非私人一切正常。

运行美居的命令:

./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));
}
  1. 当前端通过更新接收消息时,下一个请求开始上升 CORS 故障 图像

有人可以帮我解决这些吗?

4

1 回答 1

0

尝试使用 --cors-allowed-origins='http://localhost:8000'

于 2020-10-02T21:20:00.570 回答