Подтвердить что ты не робот

"Токен не найден в SecurityContext" на Silex/Symfony

Я построил проект Silex с механизмом входа.

Не будучи экспертом по Symfony, я строго соблюдал рекомендации для процесса аутентификации: http://silex.sensiolabs.org/doc/providers/security.html

... и он отлично работает в моей среде разработки

Однако, когда я нажимал свой проект на своем рабочем сервере, я получаю следующую ошибку каждый раз, когда я пытаюсь войти в мое веб-приложение.

[2012-12-18 16:35:33] CRITICAL: Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException:
A Token was not found in the SecurityContext. (uncaught exception) at
/my/app/path/vendor/symfony/security/Symfony/Component/Security/Http/Firewall/AccessListener.php line 53 [] []

что означает, что следующий код в AccessListener.php

$this->context->getToken());

выдает expec

Учитывая тот факт, что тот же код отлично работает в моей среде разработки, я предполагаю, что он имеет какое-то отношение к моей конфигурации производственного сервера.

Я нашел эту цепочку http://groups.google.com/forum/#!msg/symfony-devs/jKphNy_0Q2Y/vYfkAuyjSHEJ, которая предлагает добавить следующую строку в мой проект .htaccess

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

без результата. Я все еще получаю исключение "Токен не обнаружен в исключении SecurityContext".

Есть ли у кого-нибудь идеи?

Edit Содержимое $app['security.firewalls'] является следующим

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'security.firewalls' => array(
'login' => array(
  'pattern' => '^/login$'
),
'admin' => array(
  'pattern' => '^/',
  'form'    => array('login_path' => '/login', 'check_path' => '/admin/login_check'),
  'logout'  => array('logout_path' => '/admin/logout'), // url to call for logging out
  'users' => array(
  'admin' => array('ROLE_ADMIN', 'SOMEPASSWORD'),
  ),
)
)
));
4b9b3361

Ответ 1

Кажется, он не имеет ничего общего с HTTP Basic Auth, потому что вы не используете его ни в одном из ваших брандмауэров. Что вы используете, это брандмауэр с точкой входа form, который затем использует сеанс для хранения токена безопасности.

Я бы предложил вам посмотреть, как управлять сеансами (и куки) на prod-сервере по сравнению с вашей средой dev.

Ответ 2

Скорее всего, причина, по которой это работает на вашей локальной машине, но не в вашей продуктивной среде, заключается в том, что .htaccess поддерживается Apache, а nginx не беспокоит трату Время ввода-вывода и процессорное время, анализируя эти файлы

Если вы опубликуете свой .htaccess, я покажу вам, как перевести это в исполняемую nginx-читаемую конфигурацию.

ИЗМЕНИТЬ

Silex даже имеет пример конфигурации для nginx

http://silex.sensiolabs.org/doc/web_servers.html