gpt4 book ai didi

security - Symfony 2 SecurityContext 类已弃用

转载 作者:行者123 更新时间:2023-12-03 10:22:53 26 4
gpt4 key购买 nike

当我尝试在 symfony 演示中访问应用程序/示例时,出现以下错误

Error: The Symfony\Component\Security\Core\SecurityContext class is deprecated since version 2.6 and will be removed in 3.0. Use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage or Symfony\Component\Security\Core\Authorization\AuthorizationChecker instead.



但是,服务器正在返回带有 200 状态代码的正确答案。

我在谷歌上没有找到任何关于它的信息。有没有人遇到过这个错误和/或知道如何解决它?

最佳答案

解释

从 Symfony 2.6 开始 SecurityContext分成TokenStorageAuthorizationChecker (见:Symfony Blog - "New in Symfony 2.6: Security component improvements")。

这样做的主要原因是为了防止在注入(inject) SecurityContext 时经常发生的循环引用。进入您自己的服务。

解决方案

更改本身是 100% 向后兼容的(如链接的博客文章中所述),您只需要重写访问 SecurityContext 的方式即可。 .

// Symfony 2.5
$user = $this->get('security.context')->getToken()->getUser();
// Symfony 2.6
$user = $this->get('security.token_storage')->getToken()->getUser();

// Symfony 2.5
if (false === $this->get('security.context')->isGranted('ROLE_ADMIN')) { ... }
// Symfony 2.6
if (false === $this->get('security.authorization_checker')->isGranted('ROLE_ADMIN')) { ... }

您可以简单地尝试通过对 security.context 进行文本搜索来找到罪魁祸首。或 SecurityContext在您的源代码中(包括供应商目录)。

但是正如您所说,您使用的是 Vanilla Symfony 2.6,它似乎只是使用了一些即将被弃用的方法。所以你可以简单地使用这个......

解决方法

正如 Symfony 所做的那样,它通过触发 E_USER_DEPRECATED 被弃用。错误,您可以在启动 Symfony 时禁用它们 AppKernel :
// app/AppKernel.php
class AppKernel extends Kernel
{
public function __construct($environment, $debug) {
// Keep error reporting like it was and disable only deprecation warnings.
error_reporting(error_reporting() & (-1 ^ E_DEPRECATED));
// ...
}
}

我个人喜欢弃用警告,因为 Symfony 的变更日志往往会提供非常详细的信息,说明您需要如何更改代码以支持 Symfony 的 future 版本,并且弃用警告通常在方法实际被弃用之前几个月触发。

关于security - Symfony 2 SecurityContext 类已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29606237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com