我是Symfony的新手,我正在尝试为我的应用程序创建一个access登录表单,但当我尝试登录时,它只会一次又一次地将我重定向到表单登录。在此之前,我使用了HTTP基本表单,它工作得很好,但现在我尝试使用登录表单,这是不可能的。
这是我的代码:
用户类(带教义):
<?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;
安全Controller.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>
有什么想法吗?谢谢
最后我解决了这个问题。这是我的保安,以防有人需要。
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 }
感谢大家!!
我一直在关注symfony网站上的教程(http://symfony.com/doc/current/security.html)为我的Symfony 3.1项目添加登录名。它可以与HTTP基本身份验证一起工作,但是当我使用这里的教程添加form_登录时(http://symfony.com/doc/current/security/form_login_setup.html)它会一直重定向到登录
我的Symfony版本是:3.0.6 我从几个小时与认证战斗。我有登录表格 我的security.yml看起来: 若数据库中不存在用户名,表单可以显示给我。但如果我输入了一些密码(也错了),我在“check_path”URL上有无限循环。 登录表单上的字段正确:\用户名和\密码。表单“action”与安全中的“check_path”相同。 我做错了什么...这是非常奇怪的,因为所有是像在教程。 控
我正在将Symfony 3.1与FOSUserBundle一起使用。 我读了Symfony中的文档和集成的FOS,在这里好吧,注册似乎运行良好,并将数据持久化到数据库,但是,如果我尝试登录,我会再次被重定向到作为匿名用户的登录页面。 我检查了Symfony探查器,我可以看到当它被称为path/login\u check(在探查器中)时,用户结果是经过身份验证的,但是在/login\u check阶
我得到了一个登录表单,提交后,但似乎不自动认证,我可以看到匿名在分析器,即使我登录为管理员。 我正在从数据库中获取数据: 当然,数据库中存储的密码是加密的。 security.yml(app/config/security.yml) SecurityController.php(src/AppBundle/Controller) User.php(src/AppBundle/Entity/User
首先,我想让你知道,我是新来的Symfony。我在路上把我的PHP项目从我自己的“基本”MVC转到SimfOn.该项目已经运行良好,但我在适应Symfony时遇到了一些问题。 我从基本的框架开始,make: user和make: auth。模板运行良好。但是我未能将登录过程转换为AJAX和JSON。 我遵循了这个官方教程:https://symfonycasts.com/screencast/ap
我试图通过本教程实现简单的登录页面(我使用的是symfony 2.4): http://symfony.com/doc/current/book/security.html 登录页面很好。但当我提交表单时,我出现了以下错误: 我在网上搜索,什么都试过了。我的配置有什么问题? security.yml 路由.yml