【问题标题】:Symfony2: UsernamePasswordToken returns an User object at method getRolesSymfony2:UsernamePasswordToken 在方法 getRoles 返回一个用户对象
【发布时间】:2015-04-21 22:50:00
【问题描述】:

授权后我经常收到此错误:

RoleHierarchy.php 第 43 行中的 UndefinedMethodException: 试图在类“path\to\User”上调用方法“getRole”。 你的意思是打电话给例如“getRoles”?

用户(没有其他字段和方法):

class User implements UserInterface {
    /**
     * @ORM\ManyToMany(targetEntity = "path\to\Role", inversedBy = "users")
     * @ORM\JoinTable(name = "user_roles", joinColumns = {@ORM\JoinColumn(name = "userid", referencedColumName = "id")}, inverseJoinColumns = {@ORM\JoinColumn(name = "roleid", referencedColumnName = "id")})
     */
    protected $roles;

    public function getRoles() { return $this->roles->toArray(); }
}

角色(不含其他字段和方法):

class Role implements RoleInterface {
    /**
     * @ORM\Column(name = "role", type = "string", unique = true)
     */
    protected $role;

    /**
     * @ORM\ManyToMany(targetEntity = "path\to\User", mappedBy = "roles")
     */
    protected $users;

    public function getRole() { return $this->role; }
}

security.yml:

security:
  encoders:
    path\to\User: bcrypt
  role_hierarchy:
    ROLE_ADMIN: ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_ADMIN]
  providers:
    main_provider:
      entity: { class: path\to\User, property: username }
  firewalls:
    dev:
      pattern: ^/(_(profiler|wdt)|css|images|js)/
      security: false
    main_signin:
      pattern: ^/signin$
      anonymous: ~
    main:
      pattern: ^/
      form_login:
        provider: main_provider
        login_path: security_signin
        check_path: security_signcheck
        username_parameter: signin[username]
        password_parameter: signin[password]
        target_path_parameter: signin[targetpath]
        default_target_path: main_index
        remember_me: true
      remember_me:
        key: "%secret%"
        lifetime: 86400
        path: /
        remember_me_parameter: signin[rememberme]
      logout:
        path: security_signout
        target: security_signin
  access_control:
    - { path: ^/signin$ roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, roles: ROLE_USER }

我尝试向 User 添加一个方法 getRole 以查看会发生什么,结果如下:

RoleHierarchy.php 第 43 行中的 UndefinedMethodException: 尝试在“DateTime”类上调用方法“getRole”。

由于某种原因,UsernamePasswordToken->getRoles() 没有返回角色数组,而是返回了另一个对象。我不知道我做错了什么...我试图清除开发缓存但没有帮助。

【问题讨论】:

  • 我认为您在请求期间可能会遇到用户序列化\反序列化问题,从而导致属性混淆
  • 谢谢!我向用户添加了 Serializable 和 EquatableInterface,错误消失了。

标签: php symfony authorization token roles


【解决方案1】:

我刚刚给User添加了Serializable接口,错误消失了。

class User implements UserInterface, \Serializable {
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多