Symfony 命令 - 令牌存储不包含身份验证令牌。一个可能的原因可能是没有为此配置防火墙 URL
Symfony command - The token storage contains no authentication token. One possible reason may be that there is no firewall configured for this URL
使用 Symfony5
我创建了一个命令来执行我触发的特定任务:
docker-compose exec container bin/console app:do-smthg
现在,当此任务被触发时,它将进入数据库并修改一个字段,因此不会对该实体的每个实例无用地重复该操作。
但我不能 persist
/ flush
对象原因 :
The token storage contains no authentication token. One possible reason may be that there is no firewall configured for this URL
我对此做了一些深入研究,这可能是因为防火墙在启动此命令时使用了 isGranted()
方法。
Dependencies:
protected static string $commandName = 'app:do-smthg';
private EntityManagerInterface $em;
public function __construct(
EntityManagerInterface $em,
string $name = 'app:send-sms'
)
{
parent::__construct($name);
$this->em = $em;
}
Actual method:
public function execute(InputInterface $input, OutputInterface $output)
{
$instance = $this->instanceRepository->findOneBy(['somefield' => somevalue]);
if ($entity->getField() == false) {
// I do something here
// then I set a field and persist
$instance->setField(true);
$this->em->persist($instance);
$this->em->flush();
}
return Command::SUCCESS;
}
该命令在没有首先触发此错误消息的 persist()
和 flush()
方法的情况下工作正常。
有人知道我在执行此命令时如何绕过防火墙调用 isGranted()
方法吗?
或者是否已经存在任何其他类型的解决方法?
编辑:
我的应用程序正在使用 JWT
通常情况下,防火墙和相关的安全措施只适用于 HTTP 请求。控制台命令本身没有用户和权限。所以令人费解的是,一个简单的实体更新显然触发了 isGranted。
作为猜测,我建议调查 Doctrine 事件。他们可能正在检查权限。事实证明,我猜对了。我想这个答案的 'value' 是实际情况往往比看到的要多。
使用 Symfony5
我创建了一个命令来执行我触发的特定任务:
docker-compose exec container bin/console app:do-smthg
现在,当此任务被触发时,它将进入数据库并修改一个字段,因此不会对该实体的每个实例无用地重复该操作。
但我不能 persist
/ flush
对象原因 :
The token storage contains no authentication token. One possible reason may be that there is no firewall configured for this URL
我对此做了一些深入研究,这可能是因为防火墙在启动此命令时使用了 isGranted()
方法。
Dependencies:
protected static string $commandName = 'app:do-smthg';
private EntityManagerInterface $em;
public function __construct(
EntityManagerInterface $em,
string $name = 'app:send-sms'
)
{
parent::__construct($name);
$this->em = $em;
}
Actual method:
public function execute(InputInterface $input, OutputInterface $output)
{
$instance = $this->instanceRepository->findOneBy(['somefield' => somevalue]);
if ($entity->getField() == false) {
// I do something here
// then I set a field and persist
$instance->setField(true);
$this->em->persist($instance);
$this->em->flush();
}
return Command::SUCCESS;
}
该命令在没有首先触发此错误消息的 persist()
和 flush()
方法的情况下工作正常。
有人知道我在执行此命令时如何绕过防火墙调用 isGranted()
方法吗?
或者是否已经存在任何其他类型的解决方法?
编辑:
我的应用程序正在使用 JWT
通常情况下,防火墙和相关的安全措施只适用于 HTTP 请求。控制台命令本身没有用户和权限。所以令人费解的是,一个简单的实体更新显然触发了 isGranted。
作为猜测,我建议调查 Doctrine 事件。他们可能正在检查权限。事实证明,我猜对了。我想这个答案的 'value' 是实际情况往往比看到的要多。