Skip to content

Commit 4b26214

Browse files
authored
Merge pull request #714 from cakephp/allow-unauthenticatedRedirect-array
allow unauthenticatedRedirect as array cake style.
2 parents c3b4fe3 + 5607c7b commit 4b26214

File tree

3 files changed

+32
-3
lines changed

3 files changed

+32
-3
lines changed

docs/en/index.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ define the ``AuthenticationService`` it wants to use. Add the following method t
8585

8686
// Define where users should be redirected to when they are not authenticated
8787
$service->setConfig([
88-
'unauthenticatedRedirect' => Router::url([
88+
'unauthenticatedRedirect' => [
8989
'prefix' => false,
90-
'plugin' => null,
90+
'plugin' => false,
9191
'controller' => 'Users',
9292
'action' => 'login',
93-
]),
93+
],
9494
'queryParam' => 'redirect',
9595
]);
9696

src/AuthenticationService.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
use Authentication\Identifier\IdentifierCollection;
2727
use Authentication\Identifier\IdentifierInterface;
2828
use Cake\Core\InstanceConfigTrait;
29+
use Cake\Routing\Router;
2930
use InvalidArgumentException;
3031
use Psr\Http\Message\ResponseInterface;
3132
use Psr\Http\Message\ServerRequestInterface;
@@ -372,6 +373,9 @@ public function getUnauthenticatedRedirectUrl(ServerRequestInterface $request):
372373
if ($target === null) {
373374
return null;
374375
}
376+
if (is_array($target) && class_exists(Router::class)) {
377+
$target = Router::url($target);
378+
}
375379
if ($param === null) {
376380
return $target;
377381
}

tests/TestCase/AuthenticationServiceTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
use Cake\Http\ServerRequest;
3333
use Cake\Http\ServerRequestFactory;
3434
use Cake\I18n\DateTime;
35+
use Cake\Routing\Router;
3536
use InvalidArgumentException;
3637
use Psr\Http\Message\RequestInterface;
3738
use Psr\Http\Message\ResponseInterface;
@@ -818,6 +819,30 @@ public function testGetUnauthenticatedRedirectUrl()
818819
);
819820
}
820821

822+
public function testGetUnauthenticatedRedirectUrlAsArray()
823+
{
824+
Router::fullBaseUrl('http://localhost');
825+
826+
$builder = Router::createRouteBuilder('/');
827+
$builder->connect(
828+
'/login',
829+
['controller' => 'Users', 'action' => 'login'],
830+
['_name' => 'login'],
831+
);
832+
833+
$service = new AuthenticationService();
834+
$request = ServerRequestFactory::fromGlobals(
835+
['REQUEST_URI' => '/secrets'],
836+
);
837+
$service->setConfig('unauthenticatedRedirect', [
838+
'prefix' => false,
839+
'plugin' => false,
840+
'controller' => 'Users',
841+
'action' => 'login',
842+
]);
843+
$this->assertSame('/login', $service->getUnauthenticatedRedirectUrl($request));
844+
}
845+
821846
public function testGetUnauthenticatedRedirectUrlWithBasePath()
822847
{
823848
$request = ServerRequestFactory::fromGlobals(

0 commit comments

Comments
 (0)