我正在用Symfony 3.4编写应用程序,并且在验证用户身份时遇到一个问题:
我有一个LoginFormAuthenticator
,它扩展了AbstractFormLoginAuthenticator
。 Phpdoc原始文档实现了getUser(array, UserProviderInterface)
的{{1}}方法:
“根据凭据返回UserInterface对象。 credentials 是getCredentials()的返回值。如果需要,可以抛出AuthenticationException。如果返回null,则 为您抛出了UsernameNotFoundException。”
不过,传递给该方法的GuardAuthenticatorInterface
是我的自定义userProvider实现。所以我只是这样做:
UserProviderInterface
对此我有点困惑,因为return $userProvider->loadUserByUsername($credentials["username"]);
的原始phpdoc说:
使用给定的用户名加载用户。该方法必须抛出 如果找不到该用户,则为UsernameNotFoundException。
因此,如果找不到用户,提供者必须抛出UserProviderInterface#loadUserByUsername()
,在这种情况下,身份验证器必须抛出UsernameNotFoundException
。因此,如果我的提供者无法加载用户,则它必须抛出AuthenticationException
,将其捕获到Authenticator中,并在捕获时抛出UsernameNotFoundException
或返回null,从而抛出新的AuthenticationException
。这听起来有点傻。还是允许我通过身份验证器抛出提供者的异常?