Symfony2 不会加载自定义身份验证提供程序,加载 DaoAuthenticationProvider
Posted
技术标签:
【中文标题】Symfony2 不会加载自定义身份验证提供程序,加载 DaoAuthenticationProvider【英文标题】:Symfony2 won't load custom authentication provider, loads DaoAuthenticationProvider 【发布时间】:2013-02-07 03:48:05 【问题描述】:这是my last question的延续。
嗨,
我正在 Symfony2 应用程序中实现自定义身份验证提供程序,以便针对 Wordnik REST API 进行身份验证。
在应用程序加载时,无论请求路径是什么,这都是我得到的异常:
( ! ) Fatal error: Cannot access parent:: when current class scope has no parent in /[..]/WordRot/vendor/symfony/symfony/src/Symfony/Component/Security/Core/Authentication/Provider/UserAuthenticationProvider.php on line 43
你可以看到完整的堆栈跟踪here。
跟踪中倒数第二行显示它正在加载 DaoAuthenticationProvider
:
18 0.0217 1922792 Symfony\Component\Security\Core\Authentication\Provider\DaoAuthenticationProvider->__construct( ) ../appDevDebugProjectContainer.php:3071
但我的任何配置都没有引用该提供程序,或任何扩展它的东西。我的自定义提供程序直接实现了AuthenticationProviderInterface
。
所以我假设我的配置是错误的,我需要在某个地方明确设置WordnikProvider
,但我不确定在哪里!研究没有提供任何关于这个问题的线索。
任何帮助将不胜感激!
文件
/app/config/config.yml /app/config/security.yml /src/WordRot/PlayBundle/Security/Authentication/Provider/WordnikProvider.php /src/WordRot/PlayBundle/Security/Authentication/Token/WordnikUserToken.php /src/WordRot/PlayBundle/Security/Firewall/WordnikListener.php /src/WordRot/PlayBundle/DependencyInjection/Security/Factory/WordnikFactory.php【问题讨论】:
仅供参考:他的供应商文件夹已损坏。 【参考方案1】:行 return $this->authenticationManager->authenticate(new WordnikUserToken($username, $password, $this->providerKey));在 WordnikListener 中转到 Symfony\Component\Security\Core\Authentication\AuthenticationProviderManager (classes.php) 认证。 $this->providers 是 DaoAuthentificationProvider、WordnikProvider 和 AnonymousAuthentificationProvider。 从 DaoAuthentificationProvider 它只使用方法 supports($token): return $token instanceof UsernamePasswordToken && $this->providerKey === $token->getProviderKey();
返回 false 所以下一行是 WordnikProvider。
哦..误读:错误在构造函数中: 父::__construct($userChecker, $providerKey, $hideUserNotFoundExceptions);似乎失败了。运行 PHP 5.4.10 左右我没有错误!!
rm -rf vendor 并再次运行 composer install 或尝试使用不同的 PHP 版本!!
【讨论】:
删除供应商并重新安装它们绕过了这个错误,并在bootstrap.php.cache
中发现了两个非常奇怪的“找不到类”错误(取决于我运行的是update
还是install
)。按照建议,我升级了我的 composer.phar,重新安装了所有供应商(在 repo 的新克隆上)并且加载 WordnikProvider 没有更多问题!感谢您的帮助。【参考方案2】:
A 必须在一周前创建类似的东西。 在 and 中,我创建了一个自定义用户提供程序,在这里我只需调用 api 并根据响应创建用户或不创建用户。
我建议您阅读以下内容:
http://symfony.com/doc/2.0/cookbook/security/custom_provider.html
【讨论】:
感谢您的回复安德拉斯。我已经阅读了有关创建自定义 UserProvider 的信息,但我现在尝试实现的是自定义 AuthenticationProvider。理想情况下,我会分离逻辑,并在 AuthenticationProvider 中处理 API 的身份验证。以上是关于Symfony2 不会加载自定义身份验证提供程序,加载 DaoAuthenticationProvider的主要内容,如果未能解决你的问题,请参考以下文章