2016-12-15 4 views
1

Я folowed официальной документации Symfony, чтобы создать форму входа: http://symfony.com/doc/3.1/security/form_login_setup.htmlSymfony3.1: Традиционная Войти Форма не работает

отображается форма Логина, но когда я пытаюсь соединиться с действительным пользователем, у меня есть ничего: никаких ошибок, никакого перенаправления ... форма снова отображается без сообщения!

Это мой security.yml:

security: 
providers: 
    in_memory: 
     memory: 
      users: 
       superman: 
        password: clark 
        roles: ROLE_PRD, ROLE_CAT, ROLE_BATMAN 
       batman: 
        password: bruce 
        roles: ROLE_CAT, ROLE_BATMAN 
       test: 
        password: test 
        roles: ROLE_CAT, ROLE_BATMAN 
encoders: 
    Symfony\Component\Security\Core\User\User: plaintext 
firewalls: 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 
    autre: 
     pattern: ^/catalogue/login 
     security: false 
    main: 
     provider: in_memory 
     anonymous: ~ 
     form_login: 
      login_path: login 
      check_path: login 
      #default_target_path: /catalogue/admin/ 
     pattern: ^/catalogue/admin 
access_control: 
    - { path: ^/catalogue/admin/produit/$, roles: ROLE_BATMAN} 
    - { path: ^/catalogue/admin/produit, roles: ROLE_PRD} 
    - { path: ^/catalogue/admin/categorie, roles: ROLE_CAT} 

И это мой контроллер SecurityController.php:

<?php 

namespace CatalogueBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 


use Symfony\Component\HttpFoundation\Response; 

class SecurityController extends Controller 
{ 

    public function loginAction(Request $request) 
    { 
     $authenticationUtils = $this->get('security.authentication_utils'); 

     // get the login error if there is one 
     $error = $authenticationUtils->getLastAuthenticationError(); 

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

     //return new Response("<html> <body> SecuriteController </body> </html>"); 

     return $this->render('securite/login.html.twig', array(
      'last_username' => $lastUsername, 
      'error'   => $error, 
     )); 
    } 
} 

Наконец вид:

{% extends 'base.html.twig' %} 
{% block body %} 

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

<form action="{{ path('login') }}" method="post"> 
    <label for="username">Username:</label> 
    <input type="text" id="username" name="_username" value="{{ last_username }}" /> 

    <label for="password">Password:</label> 
    <input type="password" id="password" name="_password" /> 
    <button type="submit">login</button> 
</form> 

{% endblock %}  

Файл маршрутизации:

login: 
    path:  /catalogue/login 
    defaults: { _controller: CatalogueBundle:Security:login } 

Похоже, система безопасности Symfony не получает данные моей формы при отправке, у меня ничего нет в журнале!

+0

Я также ознакомился с учебным пособием по новой новой установке Symfony 3.2, и у меня все еще есть такая же проблема: форма входа в систему обновляется и, похоже, не звонит в систему безопасности! – Sam

ответ

0

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

  1. Я не могу видеть, где ваши перенаправляют пользователя «на успех» (это в комментариях в вашем security.yml.) то, что вы можете сделать, чтобы увидеть в «dev» navbar, если после входа в систему, если ваш пользователь больше не аноним.

  2. Я думаю, что у вас есть проблема в вашем security.yml url '/ catalog/login' будет привязан к вашему брандмауэру autre, в котором вы не указали свою регистрационную информацию о форме. Как у меня нет больше информации в вашем проекте, может быть, вы можете удалить (или комментарий) ваш «Autre» брандмауэр и просто добавить в ваш доступ контролировать свой логин маршрут, с анонимным принял ...

Попробуйте с этими деталями, чтобы сделать что-то и вернуться, если у вас есть трудности ...

[Edit] может быть, вы должны переместить «form_login:» раздел в вашем «Autre» брандмауэр, не забудут провайдер ...