当前位置: 首页 > 知识库问答 >
问题:

Symfony登录表单

奚曦哲
2023-03-14

我是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>

有什么想法吗?谢谢

共有1个答案

越朗
2023-03-14

最后我解决了这个问题。这是我的保安,以防有人需要。

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