Mercure/Symfony:JWT 密钥授权错误
Mercure/Symfony: Authorization Error with JWT Key
我正在使用 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',
]);
}
}
然后,我从 here(从 symfony 文档链接)生成一个 JWT 密钥,并在右下角输入 !ChangeMe!
,因为这是 symfony 二进制文件使用的密钥。然后在 .env
:
中设置 JWT 密钥
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.
和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).
我做错了什么?
原来是我的操作系统配置有问题。将项目推到另一台机器上后,一切正常。
我正在使用 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',
]);
}
}
然后,我从 here(从 symfony 文档链接)生成一个 JWT 密钥,并在右下角输入 !ChangeMe!
,因为这是 symfony 二进制文件使用的密钥。然后在 .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.
和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).
我做错了什么?
原来是我的操作系统配置有问题。将项目推到另一台机器上后,一切正常。