【问题标题】:Warning: get_class() expects parameter 1 to be object, string given警告:get_class() 期望参数 1 是对象,给定字符串
【发布时间】:2014-12-21 21:01:14
【问题描述】:

我正在使用 symfony 投票来处理我网站上的用户访问。 当用户未通过身份验证时,我收到错误:

Warning: get_class() expects parameter 1 to be object, string given

当用户访问调用选民的页面时。 选民中引发问题的代码是:

public function vote(TokenInterface $token, $object, array $attributes)
{
if (!$object || !$this->supportsClass(get_class($object))) {
    return self::ACCESS_ABSTAIN;
}
...}

当对象 = 'anon.'这是取自 symfony 网站的常规代码。 我当然可以修改此代码以检查对象是否为对象,但我想知道这是否正常?我本来希望不会在非对象上调用选民。

编辑: SuportsClass 和 SupportsAttribute 也是默认的:

protected function getSupportedClasses()
{
    return array(
        'AppBundle\Entity\User\Associate',
    );
}

protected function getSupportedAttributes()
{
    return array(self::SELECT_ASSOCIATES, self::GRANT_RIGHTS, self::REMOVE_RIGHT, self::DISPLAY_RIGHTS);
}

【问题讨论】:

  • 你能发布你对supportsAttribute() 和supportsClass() 的实现吗?我想知道您是否正确检查了那里的对象是否属于适当的类型。

标签: php security symfony object symfony-security


【解决方案1】:

当用户未登录,但访问控制允许匿名用户时,用户为字符串“anon”。而不是 UserInterface 实例。

您应该检查supportsClass(例如return is_object($objec);)。

【讨论】:

  • 好吧,正如您在我的代码中看到的(来自 symfony 的默认代码),suprotsClass 被赋予了一个类参数,因此在检查完成之前调用了 get_class。所以我相信我们只需要在投票方法中添加检查或限制连接用户的路由......
猜你喜欢
  • 2018-07-23
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 2016-07-14
  • 2013-11-24
  • 1970-01-01
相关资源
最近更新 更多