简体   繁体   中英

Symfony OAuth api FOSOAuthServerBundle: crash

Am trying to use the FOSOAuthServerBundle but am having a crash problem, the crash message is :

PHP Fatal error:  Declaration of MP\OAuthBundle\Entity\AccessToken::setUser() must be compatible with that of FOS\OAuthServerBundle\Model\TokenInterface::setUser() in /home/bitnami..../OAuthBundle/Entity/AccessToken.php on line 13

AccessToken.class:

<?php

namespace MP\OAuthBundle\Entity;

use FOS\OAuthServerBundle\Entity\AccessToken as BaseAccessToken;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="oauth_access_tokens")
 */
class AccessToken extends BaseAccessToken
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="Client")
     * @ORM\JoinColumn(nullable=false)
     */
    protected $client;

    /**
     * @ORM\ManyToOne(targetEntity="\MP\UserBundle\Entity\User")
     */
    protected $user;
}

TokenInterface::setUser:

 /**
     * @param UserInterface $user
     */
    function setUser(UserInterface $user);

User.class

namespace MP\UserBundle\Entity;

use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;


/**
 * User
 */
class User extends BaseUser
{
    const ROLE_ADMIN = 'ROLE_ADMIN';

    /**
     * @var integer
...

I still do not see where the problem can be ! My user is implementing the UserInterface at the end!

Any idea?

Make sure you have the following two use-statements in MP\\OAuthBundle\\Entity\\AccessToken

use Symfony\Component\Security\Core\User\UserInterface;
use FOS\OAuthServerBundle\Model\ClientUserInterface;

You have to make sure AccessToken implements FOS\\OAuthServerBundle\\Model\\TokenInterface which includes function declaration with the same interfaces.

now if you have ...

function setUser(UserInterface $user)

... inside AccessToken trying to implement TokenInterface but without the use statement ...

... UserInterface would translate to MP\\OAuthBundle\\Entity\\UserInterface

... but it needs to be Symfony\\Component\\Security\\Core\\User\\UserInterface .


conclusion

Mismatch between argument types is why PHP complains about the mismatch between the two function declarations here.

The problem is within your Access token class. You probably override setUser() method (without pasting it here), and not adding Symfony\\Component\\Security\\Core\\User\\UserInterface to use statements. There is no other way since you class is first and last overriding FOS FOS\\OAuthServerBundle\\Model\\AccessToken .

Delete this function definition from you class or fix use statements

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM