跳至内容

自定义路由

更改某些路由

如果你需要自定义处理任何身份验证功能的方式,你可能需要更新路由以指向正确的控制器。

你仍然可以使用 service('auth')->routes() 帮助程序,但你需要传递 except 选项,其中包含要自定义的路由列表

service('auth')->routes($routes, ['except' => ['login', 'register']]);

然后将路由添加到你自定义的控制器

$routes->get('login', '\App\Controllers\Auth\LoginController::loginView');
$routes->get('register', '\App\Controllers\Auth\RegisterController::registerView');

自定义后,使用 spark 路由 命令检查你的路由。

更改命名空间

如果你要覆盖所有身份验证控制器,你可以将命名空间指定为 routes() 帮助程序的一个选项

service('auth')->routes($routes, ['namespace' => '\App\Controllers\Auth']);

这将使用指定的命名空间而不是默认的 Shield 命名空间生成路由。这可以与任何其他选项(如 except)结合使用。

使用区域设置路由

你可以在路由中使用 {locale} 占位符(请参阅 区域设置检测)。

$routes->group('{locale}', static function($routes) {
    service('auth')->routes($routes);
});

以上代码注册了以下路由

+--------+----------------------------------+--------------------+--------------------------------------------------------------------+----------------+---------------+
| Method | Route                            | Name               | Handler                                                            | Before Filters | After Filters |
+--------+----------------------------------+--------------------+--------------------------------------------------------------------+----------------+---------------+
| GET    | {locale}/register                | register           | \CodeIgniter\Shield\Controllers\RegisterController::registerView   |                | toolbar       |
| GET    | {locale}/login                   | login              | \CodeIgniter\Shield\Controllers\LoginController::loginView         |                | toolbar       |
| GET    | {locale}/login/magic-link        | magic-link         | \CodeIgniter\Shield\Controllers\MagicLinkController::loginView     |                | toolbar       |
| GET    | {locale}/login/verify-magic-link | verify-magic-link  | \CodeIgniter\Shield\Controllers\MagicLinkController::verify        |                | toolbar       |
| GET    | {locale}/logout                  | logout             | \CodeIgniter\Shield\Controllers\LoginController::logoutAction      |                | toolbar       |
| GET    | {locale}/auth/a/show             | auth-action-show   | \CodeIgniter\Shield\Controllers\ActionController::show             |                | toolbar       |
| POST   | {locale}/register                | register           | \CodeIgniter\Shield\Controllers\RegisterController::registerAction |                | toolbar       |
| POST   | {locale}/login                   | »                  | \CodeIgniter\Shield\Controllers\LoginController::loginAction       |                | toolbar       |
| POST   | {locale}/login/magic-link        | »                  | \CodeIgniter\Shield\Controllers\MagicLinkController::loginAction   |                | toolbar       |
| POST   | {locale}/auth/a/handle           | auth-action-handle | \CodeIgniter\Shield\Controllers\ActionController::handle           |                | toolbar       |
| POST   | {locale}/auth/a/verify           | auth-action-verify | \CodeIgniter\Shield\Controllers\ActionController::verify           |                | toolbar       |
+--------+----------------------------------+--------------------+--------------------------------------------------------------------+----------------+---------------+

如果你在 app/Config/Filters.php 文件中设置了全局过滤器,你需要更新 except 的路径

public $globals = [
    'before' => [
        // ...
        'session' => ['except' => ['*/login*', '*/register', '*/auth/a/*', '*/logout']],
    ],
    // ...
];