Задать вопрос

Использование Silex и SecurityServiceProvider

Вы уж простите, я продолжаю изучение Silex. И теперь добрался до SecurityServiceProvider.
День попыток разобраться как работает SecurityServiceProvider не принес результатов. Прошу помощи, у меня серия вопросов.

Регистрация SSP:
$app->register(new Silex\Provider\SecurityServiceProvider());
$app['security.firewalls'] = array(
    'admin' => array(
        'pattern' => '^/admin',
        'form' => array('login_path' => '/login', 'check_path' => '/admin/login_check'),
        'http' => true,
        'users' => array(
            'admin' => array('admin', '123'),
        ),
    ),
);


а) На сколько я понимаю, пароли хранятся не в формате 123, в зашифрованном виде. Сразу возникает вопрос - как их шифровать? На этот счет в документации присутствует пример:
// find the encoder for a UserInterface instance
$encoder = $app['security.encoder_factory']->getEncoder($user);
// compute the encoded password for foo
$password = $encoder->encodePassword('foo', $user->getSalt());

Признаться, я не понимаю что означают две эти строчки. Можете пояснить?

б) Второй вопрос по регистрации у меня концептуальный. В рамках приведенного примера, получается что для каждого разделам на нужно прописывать такой элемент массива:
'admin' => array(
        'pattern' => '^/admin',
        'form' => array('login_path' => '/login', 'check_path' => '/admin/login_check'),
        'http' => true,
        'users' => array(
            'admin' => array('admin', '123'),
        ),
    ),


Если так, то неужели придется прописывать отдельно еще и список юзеров для каждого отдельного раздела? Не может такого быть, имхо.
  • Вопрос задан
  • 5094 просмотра
Подписаться 5 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@zloyusr
Так, сразу уточню, что работаю с Symfony 2, а не конкретно с Silex, но компоненты у них общие.
Для начала прочтите документацию по Security Component.
Теперь попробуем разобраться по строчкам:
'pattern' => '^/admin' - Это просто "регулярное выражение" по которому срабатывает тот или иной файерволл. Мы можем указать и просто '^/', тогда сработает сразу для всех разделов.
'form' => array('login_path' => '/login', 'check_path' => '/admin/login_check') - Это пути где будет лежать форма логина и путь по которому она будет проверяться.
'http' => true - Это тип аутентификации. В данном случаи базовая http аутентификации предусмотренная браузером. wsse - Это другой тип аутентификации, прочитать можно опять же в документации.
'users' => array(...) - Провайдер пользователей. В самом простом случае, да это массив. Если вы собираетесь хранить пользователей в базе используйте например этот.
Ответ написан
@Alcospb Автор вопроса
Попробовал скопировать из документации пример с авторизацией для /admin: silex.sensiolabs.org/doc/providers/security.html

а) Зарегистрировал
б) Добавил новый контроллер /login
в) В twig контроллера добавил форму

Получил ошибку:
InvalidArgumentException: Identifier "security.last_error" is not defined.


Как так?!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы