1

我正在使用 symfony 二进制文件中的mercure。通过设置新项目后

symfony new mercure
cd mercure
symfony composer req make mercure annotations
symfony console make:controller
symfony server:start

我在新创建的控制器中编写了一些最少的代码:

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Mercure\HubInterface;
use Symfony\Component\Mercure\Update;

class MainController extends AbstractController
{
    /**
     * @Route("/", name="main")
     */
    public function index(HubInterface $hub): Response
    {
        $update = new Update(
            'http://mercure/asdf',
            json_encode(['message' => 'heyo']),
        );
        $hub->publish($update);

        return $this->json([
            'message' => 'Welcome to your new controller!',
            'path' => 'src/Controller/MainController.php',
        ]);
    }
}

然后,我从这里生成一个 JWT 密钥(链接自 symfony 文档)并!ChangeMe!在右下角输入,因为这是 symfony 二进制文件使用的密钥。然后将 JWT 密钥设置为.env

MERCURE_URL=https://127.0.0.1:8000/.well-known/mercure
MERCURE_PUBLIC_URL=https://127.0.0.1:8000/.well-known/mercure
MERCURE_JWT_SECRET=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InB1Ymxpc2giOlsiKiJdfX0.obDjwCgqtPuIvwBlTxUEmibbBf0zypKCNzNKP7Op2UM

重新启动服务器并转到 后localhost:8000,我得到Failed to send an update.and HTTP/2 401 returned for "https://localhost:8000/.well-known/mercure".,这可能是因为密钥无法正常工作。服务器上的错误:MERCUR Topic selectors not matched, not provided or authorization error

通过设置MERCURE_JWT_SECRET="!ChangeMe!"(不加密),如果站点是从运行服务器的机器访问的,但不是从同一网络中的其他机器访问(通过 192.168.XXX.XXX:8000),它确实有效。

我究竟做错了什么?

4

1 回答 1

0

原来是我的操作系统配置有问题。将项目推送到另一台机器后,一切正常。

于 2021-08-25T08:23:16.437 回答