登录自定义路由被 Auth 拒绝

Login custom route being rejected by Auth

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

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

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

动态路由元素不会自动 added/recognized,您必须使用 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;
});

或者您必须手动将元素传递给您的登录操作(这将匹配 club_slug 路由,而不管当前的 URL):

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

另见