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>
任意のアイデア?ありがとう!!!!!
あなたが 'symfony2'か' symfony3'を使用しているかどうかを正しく記述してください。認証手順は両バージョンで若干異なります。 – niyasc
@niyasc私はそれを知らなかった。私はsymfony 3.1を使用しています –
"/ admin"のような安全な領域に "/"以外のルートを追加し、そのようなacces_controlの最後の行を変更します: '{path:^/admin、roles:ROLE_USER}' – DOZ