1

Silex の SecurityServiceProvider に問題があります。

基本的に私が欲しいのは次の構造です:

/admin/ --> 一部のユーザーに制限されている管理ページ (/admin/users と /admin/projects など、複数のサポートページを持つことができます)

/admin/login --> 訪問者が管理ページにログインするために使用できるページ

/admin/logout --> 訪問者が管理ページからログオフしたときに表示されるページ

これを実装するために、次のコードを書きました。

<?php 

require_once __DIR__.'/../vendor/autoload.php'; 

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 

$app = new Silex\Application(); 
$app['debug'] = true; 

$app->register(new Silex\Provider\SecurityServiceProvider()); 
$app->register(new Silex\Provider\TwigServiceProvider(), array( 
    'twig.path' => __DIR__.'/views', 
)); 
$app->register(new Silex\Provider\UrlGeneratorServiceProvider()); 
$app->register(new Silex\Provider\SessionServiceProvider()); 

$app['security.firewalls'] = array( 
        'login' => array( 
        'pattern' => '^/admin/login$' 
    ), 
    'logout' => array( 
        'pattern' => '^/admin/logout$' 
    ), 
    'admin' => array( 
        'pattern' => '^/admin/', 
        'form' => array('login_path' => '/admin/login', 'check_path' 
=> '/admin/login_check'), 
        'users' => array( 
            'admin' => array('ROLE_ADMIN', '5FZ2Z8QIkA7UTZ4BYkoC 
+GsReLf569mSKDsfods6LYQ8t 
+a8EW9oaircfMpmaLbPBh4FOBiiFyLfuZmTSUwzZg=='), // PW is foo
        ), 
        'logout' => array('logout_path' => '/admin/logout') 
    ), 
); 

$app->get('/admin/login', function(Request $request) use ($app) { 
    return $app['twig']->render('login.html', array( 
        'error'         => $app['security.last_error']($request), 
        'last_username' => $app['session']- 
>get('_security.last_username'), 
    )); 
}); 

$app->get('/admin/logout', function(Request $request) use ($app) { 
    return $app['twig']->render('logout.html', array()); 
}); 

$app->get('/admin/', function () use ($app) { 
    return $app['twig']->render('admin.html', array()); 
}); 

$app->run(); 

?>

ここで、「/admin/」ページにアクセスすると、常に「/login」にリダイレクトされます。認証されていないため、これは適切ですが、「login_path」パラメーターとして「/admin」login」である必要があります。私の構成は...何が間違っているのか、それとも SecurityServiceProvider のバグでしょうか?

4

1 に答える 1

2

最初に頭に浮かぶのは、マニュアルに次のように記載されていることだけです。

login_path パスは、常に保護された領域の外で定義する必要があります (または、保護された領域内にある場合は、匿名認証メカニズムを有効にする必要があります)。

ここを参照してください: フォームを使用したセキュリティに関する Silex のドキュメント

基本的な欠陥を解決するのに役立ち、続行できることを願っています.

于 2012-08-12T13:31:08.157 に答える