SimplePreAuthenticatorInterface在BadCredentialsException上抛出500错误

时间:2014-07-20 18:01:01

标签: php security symfony

我是安全自定义symfony主题的新手,按照指南创建了一种简单的方法来验证我的API。

如果用户没有发送带有令牌的特殊标题,则应用会抛出

use Symfony\Component\Security\Core\Exception\BadCredentialsException;
use Symfony\Component\Security\Core\Authentication\Token\PreAuthenticatedToken;
use Symfony\Component\HttpFoundation\Request;
//...

public function createToken(Request $request, $providerKey)
{
    if (!$request->headers->has(self::API_TOKEN)) {
        throw new BadCredentialsException('No API key found');
    }

    return new PreAuthenticatedToken('anon.', $request->headers->get(self::API_TOKEN), $providerKey);
}

我不确切知道应该返回symfony的内容,但我知道必须是401错误而不是500.我怎么能处理这个问题,我需要编写自己的SimplePreAuthenticationListener?我读到Simple*AuthenticatorInterface背后的想法是avoid that

1 个答案:

答案 0 :(得分:1)

尝试在Authenticator类中实现 Symfony \ Component \ Security \ Http \ Authentication \ AuthenticationFailureHandlerInterface

public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
    return new Response("Authentication Failed.", 403);
}