2015-11-02 3 views
3

Я пользуюсь службой безопасности Silex/Symfony и пытаюсь реализовать автоматический вход в систему, когда конкретные параметры передаются в запросе запроса.Silex/Symfony программно логин

Я посмотрел в модули, а также поиск в Интернете для решения и всегда находил что-то вроде следующего:

$user = (new \Portal\UserProvider($app['databases']['read']))->loadUserByUsername($subscriber_id); 
$token = new \Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken($user, $user->getPassword(), 'secured', $user->getRoles()); 
$app['security.token_storage']->setToken($token); 

К сожалению, это не работает для моего приложения. Я не знаю, что случилось, но модуль безопасности продолжает перенаправлять меня/логин/как указано в процессе регистрации:

/** 
* Registers the security firewall. 
*/ 
private function registerSecurity() 
{ 
    $this->register(new \Silex\Provider\SecurityServiceProvider(), array(
     'security.firewalls' => array(
      'login'  => array(
       'pattern' => '^/(login/|terms|imprint|animation|error)', 
      ), 
      'secured' => array(
       'pattern' => '^/', 
       'form'  => array(
        'login_path' => '/login/', 
        'check_path' => '/login_check' 
       ), 
       'logout' => array(
        'logout_path' => '/logout' 
       ), 
       'users' => $this->share(function() { 
        return new \Portal\UserProvider($this['databases']['read']); 
       }), 
      ), 
      'unsecured' => array(
       'anonymous' => true 
      ), 
     ), 
     'security.encoder.digest' => $this->share(function() { 
      return new \Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder('sha1', false, 1); 
     }), 
     'security.access_rules'  => array(
      array('^/login', 'ROLE_GUEST'), 
     ), 
     'security.role_hierarchy' => $this->share(function() { 
      return array(); 
     }) 
    )); 

    $this->boot(); 
} 

Что я должен рассмотреть вопрос о

  • перегрузочные
  • порядок регистрации SecurityServiceProvider, SessionServiceProvider
  • установка этого руководство лексема

?

+0

может быть полезно? : [RememberMeServiceProvider добавляет аутентификацию «Remember-Me» в SecurityServiceProvider.] (Http://silex.sensiolabs.org/doc/providers/remember_me.html). –

ответ

0

Вы используете провайдер аутентификации «форма», но это не сработает (или, может быть, я не понимаю вас правильно?). Для того, чтобы иметь возможность:

пытаются реализовать автоматический вход в систему, когда конкретные параметры передаются в запросе запроса

Вам нужно подключить к службе безопасности. Для этого вам нужно создать Listener и зарегистрировать его. Вам также понадобится Provider

Это непростой путь, так как компонент безопасности работает со многими концепциями.

Вы можете увидеть рабочий пример in this repo (который реализует услугу OAuth)

Если поток безопасности легко и вам не нужны роли, вы можете просто использовать до того промежуточного слоя (и забыть о компоненте безопасности) так:

<?php 

$app->before(function (Request $request, Application $app) { 
    $session = $request->getSession(); 
    if (false === $session->get('logged', false)) { 
     if (null !== $request->get('blah', null)) { 
      $session->set('logged', true); 
     } 
     else { 
      return new RedirectResponse('/login-url'); 
     } 
    } 
}); 
+0

Я проделал прогулку, используя сеанс и собственный механизм через промежуточное ПО. Но это не отвечает на мой вопрос. Я нашел несколько страниц, где люди использовали тот же самый метод, что и описанный выше, с созданием Token и т. Д., И это сработало для них. Даже в модульных тестовых модулях они используют один и тот же путь.Поэтому я, должно быть, делал что-то неправильно. И я хотел бы знать, что это. – Cravid

0

Вы можете использовать охрану Силекса. Он хорошо работает с получением запроса. И стандартная форма может использоваться как дополнение.

В вашем secured Security.firwall, добавьте параметр сторожевую:

"guard" => array ("authenticator" => array("app.myauthenticator")) 

и создать свой собственный класс, чтобы подтвердить вход.

Просто прочитайте Silex cookbook.

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