Symfony2 won't load custom authentication prov

2019-02-21 00:46发布

问题:

This is a continuation of my last question.

Hi,

I'm implementing, in a Symfony2 application, a custom authentication provider in order to authenticate against the Wordnik REST API.

On application load, no matter what request path, this is the exception I get:

( ! ) 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

You can see the full stacktrace here.

Second to last line in the trace reveals that it is loading the DaoAuthenticationProvider:

18 0.0217 1922792 Symfony\Component\Security\Core\Authentication\Provider\DaoAuthenticationProvider->__construct( ) ../appDevDebugProjectContainer.php:3071

But none of my configuration refers to that provider, or anything that extends it. My custom provider directly implements the AuthenticationProviderInterface.

So I assume that my configuration is wrong, and somewhere I need to be explicitly setting the WordnikProvider, but I'm not sure where! Research has not provided any clues to this issue.

Any help would be much appreciated!

Files

  • /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:

the line return $this->authenticationManager->authenticate(new WordnikUserToken($username, $password, $this->providerKey)); in the WordnikListener goes to Symfony\Component\Security\Core\Authentication\AuthenticationProviderManager (classes.php) authenticate. $this->providers are DaoAuthentificationProvider, WordnikProvider and AnonymousAuthentificationProvider. From the DaoAuthentificationProvider it only uses the method supports($token): return $token instanceof UsernamePasswordToken && $this->providerKey === $token->getProviderKey();

which returns false so next in line is WordnikProvider.

Oh..misread: the error is in the constructor: parent::__construct($userChecker, $providerKey, $hideUserNotFoundExceptions); seems to fail. Running PHP 5.4.10 or so I DON'T have an error!!

Either rm -rf vendor and run composer install again or try using a different PHP version!!



回答2:

A had to create something like this a week ago. At the and, I created a custom user provider, where I simply call the api and with the response i create the user or not.

I would advise to read this:

http://symfony.com/doc/2.0/cookbook/security/custom_provider.html