使用SecurityServiceProvider时始终被重定向到/ login

时间:2012-07-02 08:19:15

标签: php symfony1 silex

我对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”这是好事,因为我没有经过身份验证但是 它应该是“/ admin”登录“作为我的”login_path“参数 配置表明...我做错了什么或者这可能是一个 SecurityServiceProvider中的错误?

1 个答案:

答案 0 :(得分:2)

首先我想到的是手册告诉你:

  

必须始终在安全区域外定义login_path路径(或者如果它位于安全区域,则必须启用匿名身份验证机制)

见这里: Silex doc on security with form

我希望它可以帮助你解决一个基本的缺陷,你可以继续。