更改内存提供程序的默认用户对象

2024-04-03

我只是想更改默认值User内存中提供程序的对象。默认User对象是Symfony\Component\Security\Core\User\User。但是这个对象不能满足我的要求,所以我复制了该对象并添加了一些满足我的要求的属性,然后将其命名为InMemoryUser并像下面这样使用它:

encoders:
    App\Component\Security\Core\User\InMemoryUser: plaintext

然后我在尝试运行该应用程序时收到以下错误。

No encoder has been configured for account "App\Component\Security\Core\User\InMemoryUser"

经过大约半个小时的调查,我发现了这个问题。 Symfony 正在召唤Symfony\Component\Security\Core\User\InMemoryUserProvider默认情况下并使用Symfony\Component\Security\Core\User\User用于创建内存中用户的对象__construct method.

然后我尝试覆盖默认值InMemoryUserProvider如下。

services:

    App\Component\Security\Core\User\CustomInMemoryUserProvider:
        decorates: security.user.provider.concrete.api_user_provider
        arguments:
            $users: []  # this should be contains in-memory users defined in the security.yaml but i dont know how to do that.

这工作正常,除了一个小问题,不注入$users like InMemoryUserProvider。通常情况下,$users包含定义在内存中的用户列表security.yaml.

现在,我该如何注入$users for my CustomInMemoryUserProvider这是一个值得改变的好习惯吗User对象为InMemoryProvider ?

感谢您提前的答复。

我在用着symfony 5.1顺便一提。


我从未完全解开正确装饰其构造函数由 DI 扩展动态注入的服务的谜团。

但是,在这种情况下,您真正​​需要做的就是更改内存提供程序的类,这可以在内核中的编译器传递中完成:

# src\Kernel.php
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use App\User\InMemoryUserProvider;
class Kernel extends BaseKernel implements CompilerPassInterface
...
    public function process(ContainerBuilder $container)
    {
        $id = 'security.user.provider.in_memory';
        $container->getDefinition($id)->setClass(InMemoryUserProvider::class);
    }

在测试此功能时,我最初尝试扩展内存提供程序中的现有核心,但它使用无法覆盖的私有方法。所以我只是重新实现了完整的接口

namespace App\User;
class InMemoryUserProvider implements UserProviderInterface
{
    public function __construct(array $users)
    {
        dump($users); // Confirms get the users from security.yaml
    }
    public function loadUserByUsername(string $username)
    {
        // TODO: Implement loadUserByUsername() method.
        echo "Get User {$username}\n";
    }

确认它已按预期接线:

bin/console debug:container | grep UserProv                                               
  App\User\InMemoryUserProvider = App\User\InMemoryUserProvider                                                                   
  Symfony\Component\Security\Core\User\UserProviderInterface = alias for "security.user.provider.concrete.users_in_memory"                                                                                                                    
  security.user.provider.concrete.users_in_memory = App\User\InMemoryUserProvider                                                                   
  security.user.provider.in_memory = App\User\InMemoryUserProvider                                                                                  

并发出一个命令来验证它是否按预期工作:

class UserProviderCommand extends Command
{
    protected static $defaultName = 'user:provider';

    private $userProvider;

    public function __construct(UserProviderInterface $userProvider)
    {
        parent::__construct();
        $this->userProvider = $userProvider;
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        echo "User Provider: " . get_class($this->userProvider) . "\n";
        $this->userProvider->loadUserByUsername('xxx');
        return 0;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改内存提供程序的默认用户对象 的相关文章

  • 将日期格式(在数据库或输出中)更改为 dd/mm/yyyy - PHP MySQL

    MySQL 将日期存储在我的数据库中 默认情况下 为 YYYY MM DD 我的日期的字段类型是 DATE 我不需要任何时间存储 有没有一种简单的方法可以默认更改它到 DD MM YYYY 我在两个不同的表中调用不同的日期 并且在我的任何代
  • PHP_CodeSniffer - 显示失败的嗅探

    PHP CodeSniffer 中是否有设置来显示失败的嗅探 我将输出与我们的编码标准进行比较 并且一一使用很难破译哪个测试失败 看看我们可能想忽略哪个 如果有一种简单的方法来显示故障嗅探 那么我可以更轻松 更快地完成配置 您可以使用 s
  • 从 PHP 执行 SQL Server 存储过程

    我尝试从 PHP 调用 SQL Server 存储过程 这是我的存储过程 CREATE procedure dbo tester id NVARCHAR MAX AS BEGIN DECLARE tab TABLE myxml XML IN
  • 如何自定义 Zend_Form 正则表达式错误消息?

    我有以下代码 postcode form gt createElement text postcode postcode gt setLabel Post code postcode gt addValidator regex false
  • PDOException SQLSTATE[HY000] [2002] 我的本地计算机上的连接超时

    最近我从服务器导入了代码 但本地代码无法连接到远程 mysql 数据库 所以我有两个问题 我可以访问我的远程数据库吗 如果是 为什么我的代码不起作用 如果没有 有没有办法绕过这个问题 我不想复制在本地计算机上运行的 mysql 数据库 我的
  • PHP7 返回类型为 JSON

    PHP 7 有一个新功能 即返回类型声明 我们可以返回一个 字符串 类型 例如 function myFunction a string 我们还可以返回一个 数组 类型 例如 function myFunction a array 但是我们
  • MySQL 和 PHP:多关键字搜索

    我有一个包含逗号分隔关键字的字符串 例如 keywords keyword1 keyword2 keyword3 我的表架构 名为tbl address是这样的 简化的 id INT 11 PRIMARY KEY AUTO INCREMEN
  • 在 WooCommerce 订单和电子邮件中添加并显示自定义购物车项目数据

    我有一个名为彩票的自定义 woocommerce 产品类型 我需要在其上添加一个自定义选择字段 因为它不是可变产品 所以我添加了一个 一切工作正常 我在购物车和结帐中也获得了价值 但我无法在管理订单或订单邮件 客户和管理员 中获得价值 这是
  • 通过日期选择器过滤查询后检索具有特定值的行数[重复]

    这个问题在这里已经有答案了 目前 我正在使用 CodeIgniter 来检索特定时间范围内的数据 所有这些条目都有一个状态 我想将具有相同状态的所有条目分组并将其显示在各自的标题中 目前 这是我的模型类 其中我有以下条目来返回特定日期范围内
  • 生成 CloudFront 签名 URL 时性能缓慢

    我正在按照此示例使用 PHP 在 CloudFront 上创建签名 URLhttp docs aws amazon com AmazonCloudFront latest DeveloperGuide CreateURL PHP html
  • 在 PHP 中计算 Cookie 大小

    我想使用 php 在服务器端读取 cookie 并计算其长度 但找不到任何直接方法来执行此操作 那么如何实现这个任务呢 那这个呢 setcookie user Dino babu kannampuzha time 3600 if isset
  • PHP 使用 use 关键字导入类

    到目前为止我还没有使用PHPuse词 但现在必须 索引 php内容 require once Classes MainClass php obj new Main echo obj gt test 类 MainClass php
  • 如何使用 PHP SoapClient 添加任意命名空间?

    如何使用 PHP SoapClient 添加任意名称空间 命名空间实际上并未在请求中使用 但我认为它阻止了我的消息被正确使用 WSDL 在这里 http abr business gov au abrxmlsearchRPC ABRXMLS
  • PHPstorm - 无法在blade.php 文件中设置断点

    我正在开发 Laravel 应用程序 可以很好地调试我的控制器 php 文件 但我还想调试blade php 文件 在我当前的设置中 我遵循了所有 jetbrains 为 Laravel 推荐的设置 https confluence jet
  • 表单未使用 AJAX 提交

    再次更新 如果有人关心的话 我之前发布的解决方案由于某种原因停止工作 我在 ajax 请求中包含了 beforeSend 并将验证表单的 js 部分粘贴到其中 现在就像一个魅力 form on submit function e e pre
  • 如何使 WordPress 中的自定义模板充当受密码保护的页面?

    我正在使用自定义模板构建一个页面 问题是 我需要此页面受密码保护 或者至少可供登录用户访问 但即使我在 WordPress 管理的新页面部分中将其设置为此类 私人 密码保护 它也不会显示菜单项和内容 如果是私有的 或者它会立即显示页面内容
  • Laravel 雄辩的 withCount() 应该比 with() 慢

    所以我问这个的原因是在我当前的应用程序中withCount 与仅通过以下方式获取关系的所有数据相比 响应时间几乎增加了三倍with 并只是从前端获取长度 javascript 我认为使用的要点withCount 是为了加快查询速度 但也许我
  • 如何在 PHP 中递归删除目录及其全部内容(文件+子目录)? [复制]

    这个问题在这里已经有答案了 如何在 PHP 中删除目录及其全部内容 文件和子目录 手册页中的用户贡献部分rmdir http www php net rmdir包含一个不错的实现 function rrmdir dir if is dir
  • 使用 PHP 将子项添加到 XML 文件

    添加子项时 抛出此错误 无法添加孩子 父级不是 XML 树的永久成员 我无法解决这个问题 这是我的代码 if visited FIRST xml new SimpleXMLElement
  • 如何在createQueryBuilder中使用通配符?

    在我的存储库类中 我使用 public function getItemsByTag tag qb this gt createQueryBuilder c gt select c gt where c tags LIKE bipolar

随机推荐

  • C++ 元编程中的 typedef 与公共继承

    免责声明 这个问题与继承而不是 typedef https stackoverflow com questions 441744 inheritance instead of typedef到目前为止我找不到任何类似的问题 我喜欢玩 C 模
  • 在 iPhone 中显示图库中的图像

    我是 iPhone 新手 现在正处于学习阶段 实际上我想实现读取存储在 iPhone PHOTO Gallery 中的图像 然后将其显示到我的应用程序上 我在很多搜索引擎中进行了搜索 但找不到任何东西 你们这里都是专业人士 请指导我完成一些
  • 使用 PHP 反向抓取图像

    我需要使用 google 反向图像搜索来获取一些图像 API 不支持该搜索 但幸运的是 您可以通过图像的直接链接查询 google 它仍然显示结果 因此 googleURL https www google com searchbyimag
  • 我应该使用哪个版本的 iOS SDK?

    请告诉我应该使用哪个版本的 iOS SDK 以便我的应用程序可以在 iPhone 3 0 或更高版本上运行 您应该注意两个不同的概念 基础 SDK 这是您用来构建应用程序的内容 最新版本是 4 2 因此您应该使用它来构建您的应用程序 iOS
  • 自动在输入框中填写数据

    我有四个输入框 如果用户填充第一个框并单击按钮 那么它应该使用用户在第一个框中输入的值自动填充剩余的输入框 可以使用javascript来完成吗 或者我应该说用用户输入的最后数据预先填充文本框 单击按钮时 调用此函数 function fi
  • 为什么“notifyDatasetChanged()”不通知所有可见项目?

    背景 注意 我已经使用listViews很多年了 所以我非常熟悉如何使用适配器 ViewHolders等 所以这个问题对我来说没有意义 这次我遇到了一个非常奇怪的行为 由于某种原因只发生在 2 台设备上 LG G2 搭载 Android 4
  • 即使图像没有改变,如何更新数据库记录

    我使用 localDB 作为我的数据库 我有一个员工表 员工图像存储在另一个表中 这是我用于创建和更新的存储过程 IF NOT EXISTS SELECT FROM dbo Employee WHERE employee id employ
  • 如何以 PDF 格式呈现 ASP.NET MVC 视图

    我正在使用 ExpertPDF 的 Html to PDF 转换实用程序来解决这个问题 尽管如果有足够的文档 我也愿意接受其他库 简而言之 我有一个以特定方式格式化的视图 我想将其呈现为用户可以保存到磁盘的 PDF 文档 到目前为止 我拥有
  • 在我的 Angular JS 单元测试中,我什么时候应该使用 $provide 还是 Jasmine Spies

    我在开发一个大型 Angular 应用程序 最初我们通过使用 provide 来模拟服务来完成大量测试 然而 我们现在在测试中有很多 Jasmine Spies 以便对服务进行存根和监视 i e spyOn myService myMeth
  • 有没有办法取消注册套接字通道上的选择器

    这是一个非常简单的问题 但我发现需要注销一个俯瞰我的 java 套接字通道的选择器 SocketChannel client myServer accept forks off another client socket client co
  • 不可编辑的 JComboBox 中所选项目的背景颜色

    不可编辑的 JComboBox 中所选项目的背景颜色是一种蓝色 有什么办法让它变成不同的颜色 例如白色吗 这应该有效 jComboBox1 setRenderer new DefaultListCellRenderer Override p
  • android 中的 singleTask launchMode 不起作用

    所以 我有 4 项活动 活动Activity1 Activity2 Activity3 and Activity4 我从Activity1然后在某个事件中我开始Activity2然后在某个事件上Activity2我开始Activity3作为
  • 如何在SQL Server Management Studio中获得“管理员权限”?

    我使用 SQL Management Studio 2008 Express 作为本地 SQL Server 2008 Express 实例的图形界面 这两个实例仅在本地作为我的 Web 项目的测试和开发界面 最近我对 SQL 编码越来越有
  • 将模型应用于多个时间序列

    假设我有多个时间序列需要预测 如果我为每个对象都有适当的时间序列对象 我可以拟合 为了示例 ARIMA 模型等等 但是 我知道当所有系列都在一个中时 必须有一种简单的方法来自动化此过程xts对象 暂且不说不同的变量可能需要不同的 ARIMA
  • 反序列化匿名 JSON 数组?

    我有一个想要反序列化的匿名数组 这里是第一个数组对象的示例 time 08 55 54 date 2016 05 27 timestamp 1464332154807 level 3 message registerResourcePath
  • angular-google-maps 搜索功能的工作示例

    有没有人有一个有效的搜索框示例 例如 angular google maps team 在本网站的 搜索框 下显示的搜索框 https angular ui github io angular google maps api https a
  • 将对象初始化为全零

    通常 数据结构的有效初始化是将所有成员设置为零 即使在使用 C 进行编程时 也可能需要与外部 API 进行交互 这种情况就是如此 之间有什么实际区别 some struct s memset s 0 sizeof s 简单地 some st
  • 当指定为对象属性时,IIFE 如何影响其中的此关键字

    var a name Rhona check function return this name console log a check This returns 一个空字符串我希望它返回 Rhona 它没有给出 undefined 或 n
  • 为什么 ToUpperInvariant() 比 ToLowerInvariant() 更快?

    我在 CLR via C 中读到 Jeffrey Richter 写的String ToUpperInvariant 比String ToLowerInvariant 他说这是因为 FCL 使用 ToUpperInvariant 来规范化字
  • 更改内存提供程序的默认用户对象

    我只是想更改默认值User内存中提供程序的对象 默认User对象是Symfony Component Security Core User User 但是这个对象不能满足我的要求 所以我复制了该对象并添加了一些满足我的要求的属性 然后将其命