2016-12-15 46 views
1

我folowed官方symfony的文件创建一个登录表单:http://symfony.com/doc/3.1/security/form_login_setup.htmlSymfony3.1:传统的登录表单不起作用

显示形式登录,但是当我尝试与我有有效的用户连接没有:没有错误,没有重定向...窗体再次显示没有消息!

这是我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安全系统在提交时没有捕捉到我的表单数据,我没有任何记录!

+0

我也参加了新的symfony 3.2安装教程,我仍然有同样的问题:登录表单刷新,似乎不打电话给安全系统! – Sam

回答

0

我想你在这里只有一个问题。 为了帮助你继续你的项目,

  1. 我不能看到你的重定向“成功”的用户(这是在你security.yml评论。) 你可以做的是看在'开发'导航栏中,如果在登录后,如果你的用户不再是anonymoys了。

  2. 我认为你的security.yml 存在一个问题,URL'/ catalog/login'会绑定到你的'autre'防火墙,你没有精确的表单登录信息。 由于我没有更多的信息,在你的项目,也许你可以删除(或意见),你的“他者”的防火墙和只添加您的访问控制你的登录路由,匿名接受...

尝试用这些信息做一些事情,回来,如果你有困难......

[编辑] 也许你移动你的“form_login:”一节中的“他者”的防火墙,不要忘记你提供者...