21

ログインメカニズムを備えた Silex プロジェクトを構築しました。

Symfony の専門家ではないので、認証プロセスについてはこちらのガイドラインに厳密に従いました: http://silex.sensiolabs.org/doc/providers/security.html

...そして、私の開発環境では問題なく動作します

ただし、プロジェクトを本番サーバーにプッシュすると、Web アプリにログインしようとするたびに次のエラーが表示されます。

[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'),
  ),
)
)
));
4

2 に答える 2

1

どのファイアウォールでも使用していないため、HTTP 基本認証とは関係がないようです。使用するのは、エントリ ポイントを備えたファイアウォールであり、formセッションを使用してセキュリティ トークンを格納します。

開発環境と比較して、本番サーバーでセッション (および Cookie) がどのように管理されているかを確認することをお勧めします。

于 2013-01-15T16:01:29.570 に答える
0

これがローカル マシンでは機能するが、本番環境では機能しない理由として最も可能性が高いのは、.htaccess が Apache でサポートされているためです。一方、nginx は、このファイルの解析に I/O と CPU 時間を浪費しません。

.htaccess を投稿すると、これをパフォーマンスの高い nginx で読み取り可能な構成に変換する方法を示します。

編集

Silexにはnginxの構成例もあります

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

于 2013-01-13T10:22:42.520 に答える