跳至内容

使用会话验证器

会话身份验证器提供传统的 ID/密码身份验证。

学习任何新的身份验证系统都可能很困难,尤其是当它们变得更加灵活和复杂时。本指南旨在为使用 Shield 时执行的常见操作提供简短示例。它并非旨在成为每个部分的详尽文档。这可以通过特定于区域的文档文件更好地处理。

注意

这些示例假设您已运行设置脚本,并且在应用程序的 app/Config 文件夹中具有 AuthAuthGroups 配置文件的副本。

配置

配置重定向 URL

如果您需要每个人在登录/注销/注册操作后重定向到一个 URL,则可以修改 app/Config/Auth.php 中的 Config\Auth::$redirects 数组以指定要重定向到的 URL。

默认情况下,成功的登录或注册尝试都将重定向到 /,而注销操作将重定向到 已命名路由 loginURI 路径 /login。您可以在 app/Config/Auth.php 配置文件中更改使用的默认 URL

public array $redirects = [
    'register' => '/',
    'login'    => '/',
    'logout'   => 'login',
];

注意

此重定向在指定操作完成后发生。在注册或登录的情况下,它可能不会立即发生。例如,如果你指定了任何 Auth 操作,它们将在这些操作成功完成后被重定向。如果没有指定 Auth 操作,它们将在注册或登录后立即被重定向。

配置记住我功能

记住我功能默认启用。虽然这是以安全的方式处理的,但一些网站可能希望禁用它。你可能还想更改它记住用户的时间长度,并且不需要额外的登录。

public array $sessionConfig = [
    'field'              => 'user',
    'allowRemembering'   => true,
    'rememberCookieName' => 'remember',
    'rememberLength'     => 30 * DAY,
];

通过电子邮件启用账户激活

注意

你需要配置 app/Config/Email.php 以允许 Shield 发送电子邮件。请参阅 安装

默认情况下,一旦用户注册,他们就有了一个可以使用的活动帐户。你可以在 Auth 配置文件中启用 Shield 内置的基于电子邮件的激活流程。

public array $actions = [
    'register' => \CodeIgniter\Shield\Authentication\Actions\EmailActivator::class,
    'login'    => null,
];

启用两因素验证

注意

你需要配置 app/Config/Email.php 以允许 Shield 发送电子邮件。请参阅 安装

默认情况下处于关闭状态,Shield 的基于电子邮件的 2FA 可以通过在 Auth 配置文件中指定要使用的类来启用。

public array $actions = [
    'register' => null,
    'login'    => \CodeIgniter\Shield\Authentication\Actions\Email2FA::class,
];

自定义路由

如果你需要自定义处理任何身份验证功能的方式,你仍然可以使用 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 路由 命令检查你的路由。

保护页面

默认情况下,Shield 不保护页面。要使某些页面仅对已登录用户可访问,请设置 session 控制器过滤器

例如,如果你想限制所有路由(例如 localhost:8080/adminlocalhost:8080/panel 等),你需要在 app/Config/Filters.php 文件中添加以下代码。

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

注意

Shield 提供的过滤器 $aliases 由位于 src/Config/Registrar.php注册器 类自动为你添加。因此,你无需在 app/Config/Filters.php 中添加。

使用 spark 路由 命令检查你的过滤器。