强制密码重置
根据应用程序的范围,可能有时你会决定强制用户重置密码。当发现应用程序用户没有使用强密码时,或者有合理的怀疑认为其密码已被泄露时,通常会采用这种做法。
本指南提供了实现此目的的方法。
可用方法
Shield 提供了一种在整个应用程序中强制重置密码的方法。User
实体上的 Resettable
特征和 UserIdentityModel
提供了以下方法来实现此目的。
注意
如果用户进入强制重置状态,Shield 默认情况下不执行任何操作。你需要检查用户是否需要重置密码(见下文),并设置重置页面的重定向 URL,以及创建重置页面。
检查用户是否需要密码重置
当你需要检查用户是否需要重置密码时,可以使用 User
实体上的 requiresPasswordReset()
方法。返回布尔值 true
/false
。
if ($user->requiresPasswordReset()) {
//...
}
注意
你可以使用 force-reset 过滤器进行检查。
对用户强制密码重置
要强制用户重置密码,可以使用 User
实体上的 forcePasswordReset()
方法。
$user->forcePasswordReset();
对用户移除强制密码重置标志
可以使用 User
实体上的 undoForcePasswordReset()
方法撤消或删除用户上的强制重置密码标志。
$user->undoForcePasswordReset();
对多个用户强制密码重置
如果你发现需要强制多个用户重置密码,则 UserIdentityModel
的 forceMultiplePasswordReset()
方法允许你轻松地执行此操作。它接受一个用户 ID 的 Array
。
use CodeIgniter\Shield\Models\UserIdentityModel;
// ...
$identities = new UserIdentityModel();
$identities->forceMultiplePasswordReset([1,2,3,4]);
强制所有用户重置密码
如果您怀疑用户密码存在安全漏洞或泄露,您可以使用 UserIdentityModel
的 forceGlobalPasswordReset()
方法轻松强制所有应用程序用户重置密码。
use CodeIgniter\Shield\Models\UserIdentityModel;
// ...
$identities = new UserIdentityModel();
$identities->forceGlobalPasswordReset();