跳至内容

身份验证操作

身份验证操作是一种对登录或注册后可能发生的事件进行分组的方法。Shield 附带两个可供您使用的操作,并让您可以轻松定义自己的操作。

  1. 基于电子邮件的帐户激活(EmailActivate)通过向新用户发送一封电子邮件(其中包含他们必须点击的链接)来确认其电子邮件地址,以便激活其帐户。
  2. 基于电子邮件的两因素身份验证(Email2FA)会向用户的电子邮件地址发送一个 6 位数字代码,他们必须在继续操作之前确认该代码。

配置操作

操作在 Auth 配置文件中使用 $actions 变量进行设置。

public array $actions = [
    'register' => null,
    'login'    => null,
];

要定义要执行的操作,您需要将类名指定为相应任务的值

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

您必须按执行操作的顺序注册操作。配置完成后,所有内容都应该开箱即用。

路由使用基本的 auth()->routes($routes) 调用添加,但如果您选择不使用此帮助程序方法,则可以手动添加。

use CodeIgniter\Shield\Controllers\ActionController;

$routes->get('auth/a/show', 'ActionController::show');
$routes->post('auth/a/handle', 'ActionController::handle');
$routes->post('auth/a/verify', 'ActionController::verify');

所有这些页面的视图在 Auth 配置文件中使用 $views 数组进行定义。

public $views = [
    'action_email_2fa'            => '\CodeIgniter\Shield\Views\email_2fa_show',
    'action_email_2fa_verify'     => '\CodeIgniter\Shield\Views\email_2fa_verify',
    'action_email_2fa_email'      => '\CodeIgniter\Shield\Views\Email\email_2fa_email',
    'action_email_activate_show'  => '\CodeIgniter\Shield\Views\email_activate_show',
    'action_email_activate_email' => '\CodeIgniter\Shield\Views\Email\email_activate_email',
];

定义新操作

虽然提供的基于电子邮件的激活和 2FA 适用于许多网站,但其他网站会有不同的需求,例如使用短信进行验证或完全不同的需求。操作只有一个要求:它们必须实现 CodeIgniter\Shield\Authentication\Actions\ActionInterface

该接口为 ActionController 定义了三种方法

show() 应显示用户在身份验证任务(如登录)后立即访问的初始页面。它通常会向用户显示说明并提供要执行的操作,例如点击按钮以发送电子邮件或短信。您可以在此处验证电子邮件地址或电话号码。

handle() 是用户将访问的下一个页面,可用于处理 show() 告诉用户将发生的事件。例如,在 Email2FA 类中,此方法会生成代码,将电子邮件发送给用户,然后显示用户应输入 6 位数字代码的表单。

verify() 是操作旅程中的最后一步。它验证用户提供的信息并提供反馈。在 Email2FA 类中,它验证代码与数据库中保存的代码是否一致,然后将用户送回上一个表单重新尝试或将用户重定向到 login 任务会将用户重定向到的页面。

所有方法都应返回 Response 或视图字符串(例如使用 view() 函数)。