2016-08-04 8 views
1

私はSymfonyの新機能です。私は自分のアプリケーションのアクセスログインフォームを作成しようとしていますが、ログを記録しようとすると、フォームのログインに何度も何度もリダイレクトされます。その前に、私はHTTPの基本的なフォームを使用して、それは完全に働いたが、今私はログインフォームでしようとしている、それは不可能です。ここでsymfonyのログインフォーム

私のコードです:(教義と)

Userクラス:

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Security\Core\User\UserInterface; 

/** 
* Persona 
* 
* @ORM\Table(name="persona", uniqueConstraints={@ORM\UniqueConstraint(name="dni", columns={"dni"}), @ORM\UniqueConstraint(name="correo", columns={"correo"}), @ORM\UniqueConstraint(name="username", columns={"username"})}, indexes={@ORM\Index(name="id_localidad", columns={"id_localidad"}), @ORM\Index(name="id_lugar_trabajo", columns={"id_lugar_trabajo"}), @ORM\Index(name="id_puesto", columns={"id_puesto"}), @ORM\Index(name="id_grupo", columns={"id_grupo"}), @ORM\Index(name="nombre", columns={"nombre"}), @ORM\Index(name="prioridad", columns={"id_prioridad"}), @ORM\Index(name="apellidos", columns={"apellidos"})}) 
* @ORM\Entity 
*/ 
class Persona implements UserInterface, \Serializable 
{ 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="dni", type="string", length=10, nullable=false) 
    */ 
    private $dni; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="nombre", type="string", length=256, nullable=false) 
    */ 
    private $nombre; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="apellidos", type="string", length=256, nullable=false) 
    */ 
    private $apellidos; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="telefono", type="string", length=256, nullable=false) 
    */ 
    private $telefono; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="direccion", type="string", length=256, nullable=false) 
    */ 
    private $direccion; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="correo", type="string", length=256, nullable=false) 
    */ 
    private $correo; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="codigo_postal", type="integer", nullable=false) 
    */ 
    private $codigoPostal; 

    /** 
    * @var boolean 
    * 
    * @ORM\Column(name="es_tecnico", type="boolean", nullable=false) 
    */ 
    private $esTecnico; 

    /** 
    * @ORM\Column(type="string", length=25, unique=true, nullable=true) 
    */ 
    private $username; 

    /** 
    * @ORM\Column(type="string", length=64, nullable=true) 
    */ 
    private $password; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var \AppBundle\Entity\Puesto 
    * 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Puesto") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="id_puesto", referencedColumnName="id") 
    * }) 
    */ 
    private $idPuesto; 

    /** 
    * @var \AppBundle\Entity\Grupo 
    * 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Grupo") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="id_grupo", referencedColumnName="id") 
    * }) 
    */ 
    private $idGrupo; 

    /** 
    * @var \AppBundle\Entity\LugarTrabajo 
    * 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\LugarTrabajo") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="id_lugar_trabajo", referencedColumnName="id", nullable=false) 
    * }) 
    */ 
    private $idLugarTrabajo; 

    /** 
    * @var \AppBundle\Entity\Localidad 
    * 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Localidad") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="id_localidad", referencedColumnName="id", nullable=false) 
    * }) 
    */ 
    private $idLocalidad; 

    /** 
    * @var \AppBundle\Entity\Prioridad 
    * 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Prioridad") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="id_prioridad", referencedColumnName="id", nullable=false) 
    * }) 
    */ 
    private $idPrioridad; 

SecurityController.php:

<?php 

// src/AppBundle/Controller/SecurityController.php 
namespace AppBundle\Controller; 

use Symfony\Component\HttpFoundation\Request; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\Security\Core\SecurityContext; 

class SecurityController extends Controller 
{ 
    /** 
    * @Route("/login", name="login") 
    */ 
    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 $this->render(
      'security/login.html.twig', 
      array(
       // last username entered by the user 
       'last_username' => $lastUsername, 
       'error'   => $error, 
      ) 
     ); 
    } 
} 

のsecurity.yml

security: 
    encoders: 
     AppBundle\Entity\Persona: 
      algorithm: bcrypt 

    # http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers 
    providers: 
     our_db_provider: 
      entity: 
       class: AppBundle:Persona 
       property: username 
       # if you're using multiple entity managers 
       # manager_name: customer 

    firewalls: 
     login_firewall: 
      pattern: /login 
      anonymous: ~ 

     secured_area: 
      pattern:/
      anonymous: ~ 
      provider: our_db_provider 
      pattern: ^/ 
      form_login: 
       login_path: login 
       check_path: login_check 
      #http_basic: ~ 
      # http://symfony.com/doc/current/book/security.html#a-configuring-how-your-users-will-authenticate 


     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

    access_control: 
     # require ROLE_USER for /* 
     - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/, roles: ROLE_USER } 

login.html.twig

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8" /> 
     <title>-Incidencias- Acceso</title> 
    </head> 

    <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" /> 

      {# 
       If you want to control the URL the user 
       is redirected to on success (more details below) 
       <input type="hidden" name="_target_path" value="/account" /> 
      #} 

      <button type="submit">login</button> 
     </form> 
    </body> 
</html> 

任意のアイデア?ありがとう!!!!!

+0

あなたが 'symfony2'か' symfony3'を使用しているかどうかを正しく記述してください。認証手順は両バージョンで若干異なります。 – niyasc

+0

@niyasc私はそれを知らなかった。私はsymfony 3.1を使用しています –

+0

"/ admin"のような安全な領域に "/"以外のルートを追加し、そのようなacces_controlの最後の行を変更します: '{path:^/admin、roles:ROLE_USER}' – DOZ

答えて

0

最後に私はこれを解決しました。誰かがそれを必要とする場合のために私のセキュリティがあります。

security: 
encoders: 
    AppBundle\Entity\Persona: 
     algorithm: bcrypt 

# http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers 
providers: 
    our_db_provider: 
     entity: 
      class: AppBundle:Persona 
      property: username 
      # if you're using multiple entity managers 
      # manager_name: customer 

firewalls: 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 

    main: 
     provider: our_db_provider 
     anonymous: ~ 
     form_login: 
      login_path: login 
      check_path: login 
     logout: 
      path: /logout 
      target:/

     #http_basic: ~ 
     # http://symfony.com/doc/current/book/security.html#a-configuring-how-your-users-will-authenticate 

access_control: 
    # require ROLE_USER for /* 
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/, roles: ROLE_USER } 

みんなありがとう!

関連する問題