跳至内容

强制密码重置

根据应用程序的范围,可能有时你会决定强制用户重置密码。当发现应用程序用户没有使用强密码时,或者有合理的怀疑认为其密码已被泄露时,通常会采用这种做法。

本指南提供了实现此目的的方法。

注意

在使用以下方法之前,你需要获取 User 实体。有关详细信息,请参阅 获取当前用户查找用户

可用方法

Shield 提供了一种在整个应用程序中强制重置密码的方法。User 实体上的 Resettable 特征和 UserIdentityModel 提供了以下方法来实现此目的。

注意

如果用户进入强制重置状态,Shield 默认情况下不执行任何操作。你需要检查用户是否需要重置密码(见下文),并设置重置页面的重定向 URL,以及创建重置页面。

检查用户是否需要密码重置

当你需要检查用户是否需要重置密码时,可以使用 User 实体上的 requiresPasswordReset() 方法。返回布尔值 true/false

if ($user->requiresPasswordReset()) {
    //...
}

注意

你可以使用 force-reset 过滤器进行检查。

对用户强制密码重置

要强制用户重置密码,可以使用 User 实体上的 forcePasswordReset() 方法。

$user->forcePasswordReset();

对用户移除强制密码重置标志

可以使用 User 实体上的 undoForcePasswordReset() 方法撤消或删除用户上的强制重置密码标志。

$user->undoForcePasswordReset();

对多个用户强制密码重置

如果你发现需要强制多个用户重置密码,则 UserIdentityModelforceMultiplePasswordReset() 方法允许你轻松地执行此操作。它接受一个用户 ID 的 Array

use CodeIgniter\Shield\Models\UserIdentityModel;

// ...
$identities = new UserIdentityModel();
$identities->forceMultiplePasswordReset([1,2,3,4]);

强制所有用户重置密码

如果您怀疑用户密码存在安全漏洞或泄露,您可以使用 UserIdentityModelforceGlobalPasswordReset() 方法轻松强制所有应用程序用户重置密码。

use CodeIgniter\Shield\Models\UserIdentityModel;

// ...
$identities = new UserIdentityModel();
$identities->forceGlobalPasswordReset();