2012-07-02 4 views
1

У меня есть некоторые проблемы с SecurityServiceProvider Silex.Всегда переадресовываться в/login при использовании SecurityServiceProvider

В основном то, что я хочу следующую структуру:

/администратор/ -> Страница администрирования, ограничивается некоторыми пользователями (может иметь несколько suppages например/администратора/пользователей и/администратора/проекты)

/администратор/войти -> на странице, которую посетители могут использовать для входа на страницу администрирования

/администратор/выход из системы - гости> На странице видят, когда они вышли из системы со страницы администрирования

Для реализации этого я написал следующий код:

<?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», поскольку параметр «login_path» в моей конфигурации указывает ... что я делать неправильно или это может быть ошибка в SecurityServiceProvider?

ответ

2

Единственное первое приходит на ум, что руководство говорит вам, что:

Путь login_path всегда должен быть определен за пределами охраняемой территории (или, если он находится в защищенной области, анонимная проверка подлинности механизм должен быть включен)

Смотрите здесь: Silex doc on security with form

Я надеюсь, что это поможет вам решить основной недостаток, и вы можете продолжать.

Смежные вопросы