【问题标题】:Symfony - get User Provider by IDSymfony - 通过 ID 获取用户提供者
【发布时间】:2017-04-05 04:00:40
【问题描述】:

我正在使用JWTLexikBundle 和JWTRefreshTokenBundle。它工作正常,直到我想向令牌有效负载添加更多数据(准确地说是用户 ID)。 它在登录时工作正常,但在刷新令牌时不会抛出错误,因为我发现它使用不同的 UserProvider 并且因为那个不同的 UserEntity(默认一个,Symfony\Component\Security\Core\User\User)。现在,我的提供程序配置如下

providers:
    db_user_provider:
        entity:
            class: PrototypeBundle\Entity\User
            property: username

JwtRefreshTokens 库具有自定义 UserProvider 的配置参数,但我不知道是否或在哪里可以获得上面声明的这个参数。 我认为它一定是@doctrine.orm.security.user.provider 的某个实例,但它是抽象的,所以这不起作用

gesdinet_jwt_refresh_token:
    firewall: main
    user_provider: '@doctrine.orm.security.user.provider'

我试图通过bin/console debug:container 找到它,但在那里找不到它。除了专门声明它然后在任何地方使用该声明之外,还有什么方法可以获取该服务 ID?如果没有,如何以最合适的方式做到这一点?使用带有正确接口的 UserRepository 就足够了吗?

【问题讨论】:

  • 我认为您需要定义自己的用户提供程序服务:symfony.com/doc/current/security/custom_provider.html 我确实使用 debug:container 查看是否可以找到用户提供程序服务 ID,但没有运气。无论如何,自定义用户提供程序很容易实现并且可以解决问题。

标签: php symfony doctrine-orm jwt


【解决方案1】:

这是'security.user.provider.concrete.'.$name,在你的情况下是security.user.provider.concrete.db_user_provider。

这是在\Symfony\Bundle\SecurityBundle\DependencyInjection\SecurityExtension::getUserProviderId 方法中生成的。

我不知道你是否真的应该依赖这种行为,因为我想这可能只是一个实现细节。

【讨论】:

  • 谢谢,这样就行了! :D 我会尝试解决它以找到更好的解决方案,但在此之前它必须保留。
猜你喜欢
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
  • 2022-06-22
  • 1970-01-01
  • 2021-12-03
  • 2020-09-09
  • 1970-01-01
  • 2017-09-18
相关资源
最近更新 更多