Токен не был найден в 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());

вызывает ожидание

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

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

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

без результата. Я все еще получаю исключение «Токен не найден в SecurityContext».

У кого-нибудь есть идея?

Изменить Содержание $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'),
  ),
)
)
));

person benoit    schedule 18.12.2012    source источник
comment
Вы можете опубликовать настройки массива $app['security.firewalls']?   -  person Mun Mun Das    schedule 19.12.2012
comment
@m2mdas: я включил это выше   -  person benoit    schedule 20.12.2012
comment
Попробуйте добавить 'anonymous' => true, в массив брандмауэра login.   -  person Mun Mun Das    schedule 20.12.2012
comment
Какой веб-сервер у вас работает?   -  person mosch    schedule 21.12.2012
comment
Возможно, контекст безопасности symfony2 может быть записан в базе данных SQLite (не знаю о silex, но может быть похоже). В любом случае, убедитесь на 100%, что все права доступа к файлам на вашем рабочем сервере установлены правильно.   -  person ducin    schedule 23.12.2012
comment
@m2mdas m2mdas: я добавил настройку без изменений   -  person benoit    schedule 28.12.2012
comment
@tkoomzaaskz: спасибо за ответ, но какие права доступа к файлам я должен проверить?   -  person benoit    schedule 28.12.2012
comment
Пожалуйста, опубликуйте полный .htaccess в своем вопросе   -  person Michel Feldheim    schedule 13.01.2013
comment
Сеансы работают на вас? Ошибка может быть связана с невозможностью сохранить данные сеанса (хотя вы должны получить сообщение об ошибке). Кроме того: можете ли вы предоставить минимальный проект silex в качестве сути github, который воспроизводит вашу проблему? У меня есть и apache, и nginx для экспериментов.   -  person Maerlyn    schedule 13.01.2013
comment
@benoit Не могли бы вы предоставить данные, которые Мишель Фельдхейм запросил в его ответ. Мы просто пытаемся помочь :)   -  person JeanValjean    schedule 14.01.2013


Ответы (2)


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

Я бы посоветовал вам посмотреть, как сеансы (и файлы cookie) управляются на рабочем сервере по сравнению с вашей средой разработки.

person Florian Klein    schedule 15.01.2013

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

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

ИЗМЕНИТЬ

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

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

person Michel Feldheim    schedule 13.01.2013
comment
Посмотрите ссылку, которую я добавил выше - person Michel Feldheim; 20.01.2013