JWTRefreshTokenBundle icon indicating copy to clipboard operation
JWTRefreshTokenBundle copied to clipboard

"Gesdinet\JWTRefreshTokenBundle\Entity\RefreshToken" is not a valid entity or mapped super class.

Open LambertHumans opened this issue 1 year ago • 4 comments

Hi everyone, I just installed Gesdinet JWT refresh token, but can't make it works. I'm facing this error :

Class "App\Entity\RefreshToken" sub class of "Gesdinet\JWTRefreshTokenBundle\Entity\RefreshToken" is not a valid entity or mapped super class.

I didn't made any change on bundle configuration, I only replaced refresh token route. I'm using Sf6 with postgresql and php8.1.

Do you guys have an idea on how I can solve this ?

Thank you !

LambertHumans avatar Jul 21 '22 08:07 LambertHumans

Hello

I have exactly the same problem.

I tried following these instructions: https://github.com/markitosgv/JWTRefreshTokenBundle/issues/332

But the result is the same.

I'm on SF 6 and PHP 8

In the documentation we have to update our database with the new RefreshToken entity and absolutely nothing happens even when forcing the update.

Lugh-Web avatar Jul 21 '22 18:07 Lugh-Web

@LambertHumans after looking a second time the Following procedure : https://github.com/markitosgv/JWTRefreshTokenBundle/issues/332

I have change the entity and It works now


<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gesdinet\JWTRefreshTokenBundle\Entity\RefreshToken as BaseRefreshToken;

#[ORM\Entity]
#[ORM\Table(name: 'refresh_token')]
class RefreshToken extends BaseRefreshToken
{
    public function getId() 
    {
        return $this->id;
    }
}

Lugh-Web avatar Jul 21 '22 21:07 Lugh-Web

@Lugh-Web, thanks for dropping this in! This also fixed my issue.

justingivens avatar Mar 09 '23 16:03 justingivens

I've been struggling for a while to set up this refresh token using SF 6.2 + API platform 3.1 using PHP8.2

It looks like there are conflicts between annotations and attributes, and that the RefreshTokenRepository cannot be reached inside the vendor directory.

I searched on the web for similar issues, found several in 2022 but nothing really recent.

Anyway I finally made it work by modifying the RefreshToken.php and placing the RefreshTokenRepository inside the project Repository folder. These are the only differences I implemented vs this documentation.

Here is the adjusted Entity

namespace App\Entity\Main;

use Doctrine\ORM\Mapping as ORM;
use Gesdinet\JWTRefreshTokenBundle\Entity\RefreshToken as BaseRefreshToken;

#[ORM\Table(name: 'refresh_token')]
#[ORM\Entity(repositoryClass: 'App\Repository\Main\RefreshTokenRepository')]
class RefreshToken extends BaseRefreshToken
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column(type: 'integer')]
    protected $id;

    #[ORM\Column(type: 'string')]
    protected $refreshToken;

    #[ORM\Column(type: 'string')]
    protected $username;

    #[ORM\Column(type: 'datetime')]
    protected $valid;
}

And the Repository simply copied from the vendor dir and pasted in the project

namespace App\Repository\Main;

use Doctrine\ORM\EntityRepository;
use Gesdinet\JWTRefreshTokenBundle\Doctrine\RefreshTokenRepositoryInterface;

/**
 * @extends EntityRepository<RefreshToken>
 * @implements RefreshTokenRepositoryInterface<RefreshToken>
 */
class RefreshTokenRepository extends EntityRepository implements RefreshTokenRepositoryInterface
{
    /**
     * @param \DateTimeInterface|null $datetime
     *
     * @return RefreshToken[]
     */
    public function findInvalid($datetime = null)
    {
        $datetime = (null === $datetime) ? new \DateTime() : $datetime;

        return $this->createQueryBuilder('u')
            ->where('u.valid < :datetime')
            ->setParameter(':datetime', $datetime)
            ->getQuery()
            ->getResult();
    }
}

Hope this will help others

vesirem avatar Jun 16 '23 06:06 vesirem