我在项目中实现了Symfony的高级用户界面。它用于注册和登录用户。
现在我有其他条件,我想在用户登录时检查。比如,如果用户已经确认了他的或她的电子邮件和/或其他条件。这些条件是用户实体的数据库/属性中的字段,因此很容易进行检查。
想象一下,我想向用户类添加一个isEmailConfirmed()
函数,该函数与高级用户界面中的isEnabled()
函数一样被调用。如果返回true,则用户可以登录。如果返回false,我想限制访问并显示一条解决问题的消息。
-->在Symfony'Component'Security'Core'User'UserChecker
中的checkPreAuth()
函数中添加这样的函数是否正确?我想用checkCustomConditions()
这样的函数来连接这里?
在身份验证过程中,当尝试对用户进行身份验证时,提供者首先获取凭据并从存储(db,active directory)中检索用户。然后在为用户实际创建令牌之前调用Symfony'Component'Security'Core'User'UserChecker::preAuth()
方法。在这里,针对您上面提到的每种情况都会抛出异常。您可以在登录操作中捕捉它们并对其进行解释。
我想添加您自己的preAuth逻辑的侵入性最小的方法是尝试覆盖提供者的定义(如果您使用默认的提供者)以使用您自己的UserChecker。