2012-04-11 7 views
0

Ich habe versucht, FOSUserBundle mit FpOpenIDBundle zu integrieren, aber ich stieß auf ein Problem, wenn Auth erstellt wird. Ich bekomme FehlerSymfony 2.0 FOSUserBundle mit OpenID

Instanzen von "Alef \ UserBundle \ Entity \ User" werden nicht unterstützt.

Meine Klasse sieht wie folgt aus

<?php 

namespace Alef\UserBundle\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\Common\Collections\Collection; 
use FOS\UserBundle\Entity\User as BaseUser; 
use FOS\UserBundle\Model\GroupInterface; 
use Doctrine\ORM\Mapping as ORM; 


/** 
* User Entity 
* 
* @ORM\Entity 
* @ORM\Table(name="alef_users") 
* 
* @author James Morris <[email protected]> 
* @package SecurityBundle 
*/ 
class User extends BaseUser implements \FOS\UserBundle\Model\GroupableInterface 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\ManyToMany(targetEntity="Alef\UserBundle\Entity\Group") 
    * @ORM\JoinTable(name="alef_user_groups", 
    *  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")} 
    *) 
    */ 
    protected $groups; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="firstname", type="string", length=255) 
    */ 
    protected $firstname; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="lastname", type="string", length=255) 
    */ 
    protected $lastname; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="facebookId", type="string", length=255) 
    */ 
    protected $facebookId; 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    public function serialize() 
    { 
     return serialize(array($this->facebookId, parent::serialize()));; 
    } 

    public function unserialize($data) 
    { 
     list($this->facebookId, $parentData) = unserialize($data); 
     parent::unserialize($parentData); 
    } 

    /** 
    * @return string 
    */ 
    public function getFirstname() 
    { 
     return $this->firstname; 
    } 

    /** 
    * @param string $firstname 
    */ 
    public function setFirstname($firstname) 
    { 
     $this->firstname = $firstname; 
    } 

    /** 
    * @return string 
    */ 
    public function getLastname() 
    { 
     return $this->lastname; 
    } 

    /** 
    * @param string $lastname 
    */ 
    public function setLastname($lastname) 
    { 
     $this->lastname = $lastname; 
    } 

    /** 
    * Get the full name of the user (first + last name) 
    * @return string 
    */ 
    public function getFullName() 
    { 
     return $this->getFirstName() . ' ' . $this->getLastname(); 
    } 

    /** 
    * @param string $facebookId 
    * @return void 
    */ 
    public function setFacebookId($facebookId) 
    { 
     $this->facebookId = $facebookId; 
     $this->setUsername($facebookId); 
     $this->salt = ''; 
    } 

    /** 
    * @return string 
    */ 
    public function getFacebookId() 
    { 
     return $this->facebookId; 
    } 

    /** 
    * @param Array 
    */ 
    public function setFBData($fbdata) 
    { 
     if (isset($fbdata['id'])) { 
      $this->setFacebookId($fbdata['id']); 
      $this->addRole('ROLE_FACEBOOK'); 
     } 
     if (isset($fbdata['first_name'])) { 
      $this->setFirstname($fbdata['first_name']); 
     } 
     if (isset($fbdata['last_name'])) { 
      $this->setLastname($fbdata['last_name']); 
     } 
     if (isset($fbdata['email'])) { 
      $this->setEmail($fbdata['email']); 
     } 
    } 

    public function __construct() 
    { 
     parent::__construct(); 
     $this->facebookId = 0; 
    } 

} 

Ich weiß, es Vererbung Problem ist, weil FpOpenId Original symfony Sicherheit Benutzerklasse erbt aber FOSUSer erbt nicht von ihm. Gibt es eine Möglichkeit, FPOpenIDBundle zu aktualisieren, um damit tatsächlich zu arbeiten?

+0

Hinweis: Sie fpOpenID nicht mehr verwenden, wenn Sie Ihre geistige Gesundheit halten wollen. Es wurde seit einem Jahr nicht mehr aktualisiert und wird bei den aktuellen PHP/Symfony2-Versionen nicht mehr funktionieren, da wichtige Methoden wie getExtraInformation() veraltet sind. – Tom

Antwort

0

Minen Konfiguration sieht wie folgt aus:

use FOS\UserBundle\Model\User as BaseUser; 
use Symfony\Component\Validator\Constraints as Assert; 
use Symfony\Component\Security\Core\Role\RoleInterface; 
use Symfony\Component\Security\Core\User\UserInterface as SecurityUserInterface; 

class User implements UserInterface, GroupableInterface 
{ 
} 

Ich war wegen der Hyper benutzerdefinierten Funktionen die gesamte Klasse zu überschreiben.

Fügen Sie einfach

class User extends BaseUser implements UserInterface, GroupableInterface 

Grüße, Max

+0

Warte was? Sie haben die gesamte FoS-Benutzerklasse umgeschrieben? – Kaminari

+0

Die FoS-Benutzerklasse ist nicht _that_ special (https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Model/User.php). Es ist sogar in den FoSUserBundle-Dokumenten erwähnt, dass Sie _can_ (aber nicht _have to_) die 'User'-Klasse erweitern können. – KingCrunch

+0

Welche Benutzerklasse? Wie Sie sehen können, erweitere ich die 'User' Klasse aber die FOS User Klasse. Aber es ist nicht genug. Es muss Symfony-Benutzerklasse sein. – Kaminari

0
use FOS\UserBundle\Model\GroupableInterface; 
use FOS\UserBundle\Model\GroupInterface; 

class User extends BaseUser 
{ 
    public function addGroup(GroupInterface $group) 
    { 
     parent::addGroup($group); 
    } 
}