diff options
Diffstat (limited to 'Guard')
-rw-r--r-- | Guard/Authenticator/AbstractFormLoginAuthenticator.php | 23 | ||||
-rw-r--r-- | Guard/Firewall/GuardAuthenticationListener.php | 2 | ||||
-rw-r--r-- | Guard/Tests/Authenticator/AbstractFormLoginAuthenticatorTest.php | 64 | ||||
-rw-r--r-- | Guard/composer.json | 4 |
4 files changed, 78 insertions, 15 deletions
diff --git a/Guard/Authenticator/AbstractFormLoginAuthenticator.php b/Guard/Authenticator/AbstractFormLoginAuthenticator.php index b3c6bd7..d10e486 100644 --- a/Guard/Authenticator/AbstractFormLoginAuthenticator.php +++ b/Guard/Authenticator/AbstractFormLoginAuthenticator.php @@ -17,6 +17,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Security; +use Symfony\Component\Security\Http\Util\TargetPathTrait; /** * A base class to make form login authentication easier! @@ -25,6 +26,8 @@ use Symfony\Component\Security\Core\Security; */ abstract class AbstractFormLoginAuthenticator extends AbstractGuardAuthenticator { + use TargetPathTrait; + /** * Return the URL to the login page. * @@ -33,16 +36,6 @@ abstract class AbstractFormLoginAuthenticator extends AbstractGuardAuthenticator abstract protected function getLoginUrl(); /** - * The user will be redirected to the secure page they originally tried - * to access. But if no such page exists (i.e. the user went to the - * login page directly), this returns the URL the user should be redirected - * to after logging in successfully (e.g. your homepage). - * - * @return string - */ - abstract protected function getDefaultSuccessRedirectUrl(); - - /** * Override to change what happens after a bad username/password is submitted. * * @param Request $request @@ -69,9 +62,15 @@ abstract class AbstractFormLoginAuthenticator extends AbstractGuardAuthenticator */ public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey) { - // if the user hit a secure page and start() was called, this was + @trigger_error(sprintf('The AbstractFormLoginAuthenticator::onAuthenticationSuccess() implementation was deprecated in Symfony 3.1 and will be removed in Symfony 4.0. You should implement this method yourself in %s and remove getDefaultSuccessRedirectUrl().', get_class($this)), E_USER_DEPRECATED); + + if (!method_exists($this, 'getDefaultSuccessRedirectUrl')) { + throw new \Exception(sprintf('You must implement onAuthenticationSuccess() or getDefaultSuccessRedirectURL() in %s.', get_class($this))); + } + + // if the user hits a secure page and start() was called, this was // the URL they were on, and probably where you want to redirect to - $targetPath = $request->getSession()->get('_security.'.$providerKey.'.target_path'); + $targetPath = $this->getTargetPath($request->getSession(), $providerKey); if (!$targetPath) { $targetPath = $this->getDefaultSuccessRedirectUrl(); diff --git a/Guard/Firewall/GuardAuthenticationListener.php b/Guard/Firewall/GuardAuthenticationListener.php index ed0a36e..59d5d29 100644 --- a/Guard/Firewall/GuardAuthenticationListener.php +++ b/Guard/Firewall/GuardAuthenticationListener.php @@ -78,7 +78,7 @@ class GuardAuthenticationListener implements ListenerInterface if ($event->hasResponse()) { if (null !== $this->logger) { - $this->logger->debug(sprintf('The "%s" authenticator set the response. Any later authenticator will not be called', get_class($guardAuthenticator))); + $this->logger->debug('The "{authenticator}" authenticator set the response. Any later authenticator will not be called', array('authenticator' => get_class($guardAuthenticator))); } break; diff --git a/Guard/Tests/Authenticator/AbstractFormLoginAuthenticatorTest.php b/Guard/Tests/Authenticator/AbstractFormLoginAuthenticatorTest.php new file mode 100644 index 0000000..e86b5ad --- /dev/null +++ b/Guard/Tests/Authenticator/AbstractFormLoginAuthenticatorTest.php @@ -0,0 +1,64 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Security\Guard\Tests\Authenticator; + +use Symfony\Component\HttpFoundation\RedirectResponse; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Security\Core\User\UserInterface; +use Symfony\Component\Security\Core\User\UserProviderInterface; +use Symfony\Component\Security\Guard\Authenticator\AbstractFormLoginAuthenticator; + +class AbstractFormLoginAuthenticatorTest extends \PHPUnit_Framework_TestCase +{ + /** + * @group legacy + */ + public function testLegacyWithLoginUrl() + { + $request = new Request(); + $request->setSession($this->getMock('Symfony\Component\HttpFoundation\Session\Session')); + + $authenticator = new LegacyFormLoginAuthenticator(); + /** @var RedirectResponse $actualResponse */ + $actualResponse = $authenticator->onAuthenticationSuccess( + $request, + $this->getMock('Symfony\Component\Security\Core\Authentication\Token\TokenInterface'), + 'provider_key' + ); + + $this->assertEquals('/default_url', $actualResponse->getTargetUrl()); + } +} + +class LegacyFormLoginAuthenticator extends AbstractFormLoginAuthenticator +{ + protected function getDefaultSuccessRedirectUrl() + { + return '/default_url'; + } + + protected function getLoginUrl() + { + } + + public function getCredentials(Request $request) + { + } + + public function getUser($credentials, UserProviderInterface $userProvider) + { + } + + public function checkCredentials($credentials, UserInterface $user) + { + } +} diff --git a/Guard/composer.json b/Guard/composer.json index 99dff9c..7adb774 100644 --- a/Guard/composer.json +++ b/Guard/composer.json @@ -18,7 +18,7 @@ "require": { "php": ">=5.5.9", "symfony/security-core": "~2.8|~3.0", - "symfony/security-http": "~2.8|~3.0" + "symfony/security-http": "~3.1" }, "require-dev": { "psr/log": "~1.0" @@ -32,7 +32,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } } } |