2016-07-08 1 views
0

Я хочу войти на главную страницу вместо отдельного сайта. Когда я ввожу свои учетные данные в/логин, все в порядке, но оно не работает на/route.Symfony3: Форма входа не работает, если отображается на другом сайте

оказывает вход в форму с этой командой в base.html.twig (для целей тестирования я хочу сделать форму входа на каждой странице теперь):

{{ render(controller("AppBundle:Security:login")) }} 

Вот мой login.html.twig:

{% if error %} 
     <div>{{ error.messageKey|trans(error.messageData, 'security') }}</div> 
    {% endif %} 

    <form action="{{ path('login') }}" method="post"> 
     <div class="form-group"> 
      <input type="text" class="form-control" id="username" placeholder="Email" name="_username" value="{{ last_username }}" /> 

      <input type="password" class="form-control" id="password" placeholder="Heslo" name="_password" /> 
     </div> 
     <button type="submit" class="btn btn-success">Přihlásit</button> 
     <a href="/registration" class="btn btn-info" role="button">Registrovat</a> 
    </form> 

И мой loginAction:

/** 
    * @return array 
    * @Route("/login", name="login") 
    * @Template() 
    */ 
    public function loginAction() 
    { 
     $authenticationUtils = $this->get('security.authentication_utils'); 

     // get error 
     $error = $authenticationUtils->getLastAuthenticationError(); 

     // last username entered by the user 
     $lastUsername = $authenticationUtils->getLastUsername(); 

     return [ 
      'last_username' => $lastUsername, 
      'error'   => $error 
     ]; 
    } 

И secured_area в security.yml:

secured_area: 
      pattern: ^/ 
      anonymous: ~ 
      provider: main 
      form_login: 
       login_path: login 
       check_path: login 
      logout: 
       path: /logout 
       target:/

Форма входа в систему находится на начальной странице. Но ничего не происходит, когда я вводим учетные данные и нажимаю кнопку. Может быть, потому, что кнопка пытается найти форму в действии, определенную для главной страницы, а не действие, определенное для страницы входа?

Есть ли опция «принудительно» использовать кнопку вместо исходного (логина)?

Благодарим за ответы.

ответ

1

Вы должны оставить форму входа в форму check_path, настроенную в security.yml, а не на контроллер, отображающий вашу форму для входа.

Этот URL-адрес (который полностью перехвачен расширением безопасности), который будет аутентифицировать пользователя, и если произошла ошибка, перенаправит пользователя к действию входа.

Подробных инструкции по форме логина на основе, как настройки, проверить специальную кулинарную статью в документации: http://symfony.com/doc/current/cookbook/security/form_login_setup.html

+0

Спасибо. Я действительно новичок в symfony, и я не знаю, как отправить форму на check_path. Я обновил свой вопрос - добавлена ​​часть security.yml. Должен ли я создать другую страницу для check_path? Можете ли вы привести пример о том, как заставить все работать? Спасибо –

+0

Я прочитал ваш ответ еще раз. Означает ли это, что расширение безопасности должно заботиться о регистрации? Может быть, линия контроллера вывода вызывает ошибку? Когда я нажимаю кнопку для ведения журнала, ничего не происходит. Кнопка должна перенаправить меня в/login, если логин завершится неудачно, я прав? Я вижу, что кнопка отправки не имеет параметров. Когда я визуализую форму на другой странице, чем/логин, как symfony может знать, что это кнопка для ведения журнала? –

+0

Вы, кажется, используете тот же маршрут для login_path, что и check_path. Вы должны создать новый маршрут для check_path с другим URL-адресом. Затем в теге формы вы должны создать URL-адрес пути проверки для свойства action. – Gerry

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