summaryrefslogtreecommitdiffstats
path: root/Guard
diff options
context:
space:
mode:
Diffstat (limited to 'Guard')
-rw-r--r--Guard/Authenticator/AbstractFormLoginAuthenticator.php23
-rw-r--r--Guard/Firewall/GuardAuthenticationListener.php2
-rw-r--r--Guard/Tests/Authenticator/AbstractFormLoginAuthenticatorTest.php64
-rw-r--r--Guard/composer.json4
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"
}
}
}