登录自定义路由被身份验证拒绝


Router::scope('/:club_slug', function ($routes) {
$routes->connect('/login', ['controller' => 'Users', 'action' => 'login']);
});

因此,当我尝试访问http://example.com/club-name/login时,我被重定向到带有闪存消息You have to login to access this areahttp://example.com/users/login

身份验证loginAction[controller => 'Users', 'action' => 'login'],因为我在问题开头提到的自定义路由指向在loginAction中指定的路径,我认为路由会知道我在说同一件事,但不是正在发生的事情。

动态路由元素不会自动添加/识别,您必须使用persist选项(仅适用于该特定路由)保留它们:

Router::scope('/:club_slug', function ($routes) {
$routes->connect(
'/login',
['controller' => 'Users', 'action' => 'login'],
['persist' => ['club_slug']]
);
});

或 URL 过滤器(影响使用club_slug元素的所有路由):

Router::addUrlFilter(function ($params, $request) {
if (isset($request->params['club_slug']) && !isset($params['club_slug'])) {
$params['club_slug'] = $request->params['club_slug'];
}
return $params;
});

或者您必须手动将元素传递给您的登录操作(无论当前 URL 如何,这都将匹配club_slug路由):

'loginAction' => [
'controller' => 'Users',
'action' => 'login',
'club_slug' => 'club-slug' // wherever it may have come from
]

参见

创建
  • 持久 URL 参数>路由>
  • 说明书
  • API> Cake\Routing\RouteBuilder::connect()

最新更新