如何在Symfony中使用UserProvider和Authenticator正确处理“找不到用户”

时间:2018-10-14 13:10:04

标签: symfony

我正在用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。这听起来有点傻。还是允许我通过身份验证器抛出提供者的异常?

0 个答案:

没有答案