Gol*_*ack 1 symfony lexikjwtauthbundle symfony6
我正在 Symfony 6 和 PHP 8.1 基础上安装 JWTRefreshTokenBundle
我按照文档操作,收到以下错误:“Gesdinet\JWTRefreshTokenBundleEntityRefreshToken”的“AppEntityRefreshToken”子类不是有效的实体或映射的超类。
我继续搜索并尝试了以下过程: https: //github.com/markitosgv/JWTRefreshTokenBundle/issues/332
但结果是一样的。
奇怪的是,在文档中,我们必须使用新的 RefreshToken 实体更新数据库,即使强制更新也绝对没有任何反应
您将在下面找到不同的文件。
如果有人有想法,我很感兴趣!提前致谢
-- 应用\Entity\RefreshToken.php
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Gesdinet\JWTRefreshTokenBundle\Entity\RefreshToken as BaseRefreshToken;
/**
* @ORM\Entity
* @ORM\Table("refresh_tokens")
*/
class RefreshToken extends BaseRefreshToken
{
}
Run Code Online (Sandbox Code Playgroud)
-- 安全.yaml
providers:
# used to reload user from session & other features (e.g. switch_user)
app_user_provider:
entity:
class: App\Entity\User
property: email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
api:
pattern: ^/api/
stateless: true
entry_point: jwt
json_login:
check_path: /api/authentication_token
provider: app_user_provider
username_path: email
password_path: password
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
jwt: ~
refresh_jwt:
check_path: /api/authentication_refresh
provider: app_user_provider
main:
jwt: ~
Run Code Online (Sandbox Code Playgroud)
-- 路线.yaml
json_login:
path: /api/authentication_token
refresh_token:
path: /api/authentication_refresh
Run Code Online (Sandbox Code Playgroud)
-- gesdinet_jwt_refresh_token.yaml
gesdinet_jwt_refresh_token:
refresh_token_class: App\Entity\RefreshToken
Run Code Online (Sandbox Code Playgroud)
小智 7
我找到了解决你问题的方法。您需要删除 App/Entity/RefreshToken 文件,然后使用 Symphony CLI 并运行
symfony console make:entity // or php bin/console ...
Run Code Online (Sandbox Code Playgroud)
将实体命名为 RefreshToken 并且不添加任何属性
然后删除刚刚创建的存储库类并进入文件 App/Entity/RefreshToken 使其看起来像这样:
<?php
namespace App\Entity;
use Gesdinet\JWTRefreshTokenBundle\Entity\RefreshToken as BaseRefreshToken;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
#[ORM\Table(name: "refresh_tokens")]
class RefreshToken extends BaseRefreshToken
{
}
Run Code Online (Sandbox Code Playgroud)
你现在可以
symfony console make:migration
Run Code Online (Sandbox Code Playgroud)
然后
symfony console d:m:m
Run Code Online (Sandbox Code Playgroud)
当您 ping 登录路由时,它应该会像魅力一样发挥作用
编辑:
您的 security.yaml 防火墙应如下所示:
firewalls:
dev:
pattern: ^/_(profiler|wdt)
security: false
main:
pattern: ^/login
stateless: true
provider: app_user_provider
json_login:
provider: app_user_provider
check_path: /login
username_path: email
password_path: password
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
logout:
path: /logout
api:
pattern: ^/api
stateless: true
provider: app_user_provider
jwt:
provider: app_user_provider
authenticator: lexik_jwt_authentication.security.jwt_authenticator
api_token_refresh:
pattern: ^/token/refresh
stateless: true
refresh_jwt: ~
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2468 次 |
| 最近记录: |