1

我已经按照官方 symfony 文档创建了一个登录表单:http ://symfony.com/doc/3.1/security/form_login_setup.html

显示表单登录,但是当我尝试与有效用户连接时,我什么都没有:没有错误,没有重定向......表单再次显示,没有任何消息!

这是我的 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 安全系统没有捕获我的表单数据,我的日志中没有任何内容!

4

1 回答 1

0

我认为您在这里遇到的问题不止一个。为了帮助您继续您的项目,

  1. 我看不到您在“成功时”将用户重定向到哪里(在您的 security.yml 中的评论中。)如果您的用户不再是匿名用户,那么您可以做的是在登录后在“开发”导航栏中查看.

  2. 我认为你的 security.yml 有问题,url '/catalogue/login' 将绑定到你的 'autre' 防火墙,你没有精确地填写表单登录信息。 由于我在您的项目中没有更多信息,也许您可​​以删除(或评论)您的“autre”防火墙,并在您的访问控制中添加您的登录路由,并接受匿名...

尝试使用这些信息做某事,如果遇到困难,请回来...

[编辑] 也许你必须在你的 'autre' 防火墙中移动你的 'form_login:' 部分,不要忘记你的提供商......

于 2016-12-15T11:53:28.530 回答