Silex basic Authentication — пользовательский обработчик ошибок

Я строю API, используя Silex, и я требую, чтобы конечный пользователь отправлял учетные данные через тег заголовка http обычной аутентификации. Я хочу создать собственный обработчик ошибок аутентификации

Я попробовал это, но это не сработало. Функция ошибки никогда не срабатывает

$app['security.authentication.failure_handler.auth'] = function ($app) {
return new AuthFailureHandler($app);
};

$app->register(new SecurityServiceProvider(), array(
'security.firewalls'    => array(
'foo'     => array('pattern' => '^/foo'), // Example of an url available as anonymous user
'default' => array(
'pattern' => '^.*$',
'http'    => true,
'users'   => function () use ($app) {
return new UserProvider(new UserRepository($app['db']));
},
),
),
'security.access_rules' => array(
// You can rename ROLE_USER as you wish
array('^/.+$', UserRole::USER),
array('^/foo$', ''), // This url is available as anonymous user
),
));

Это класс обработчика ошибок

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface;

class AuthFailureHandler implements AuthenticationFailureHandlerInterface
{
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
return new JsonResponse(array(
'type'    => 'error',
'message' => 'Incorrect username or password.',
));
}
}

0

Решение

Вы определяете этот обработчик для авт брандмауэр (.auth в $app['security.authentication.failure_handler.auth']), но должно быть default так как это тот, который требует аутентификации.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]