Php Can';t使登录路径在Symfony 2中工作

Php Can';t使登录路径在Symfony 2中工作,php,security,login,symfony,Php,Security,Login,Symfony,我已经在每本手册上尝试了所有配置,但仍然无法使其正常工作! 有人能帮我找到错误吗?这是我的密码: Security.yml security: encoders: Symfony\Component\Security\Core\User\User: plaintext role_hierarchy: ROLE_ADMIN: ROLE_USER ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALL

我已经在每本手册上尝试了所有配置,但仍然无法使其正常工作! 有人能帮我找到错误吗?这是我的密码:

Security.yml

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
    in_memory:
        users:
            user:  { password: userpass, roles: [ 'ROLE_USER' ] }
            admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }

firewalls:
    main:
        pattern: ^/
        provider: in_memory
        anonymous: true
        security: true
        form_login:
            login_path: default_login
            check_path: default_check
        logout:
            path: default_logout
            target: default_index
        remember_me:
            key: %secret%
            lifetime: 3600
            domain: ~
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    #- { path: ^/afiliados, roles: ROLE_SUPER_ADMIN}
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    #- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
namespace Epika\ClubBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Security\Core\SecurityContext;

/**
 * Default controller.
 *
 */
class DefaultController extends Controller
{


    /**
     * @Route("/login", name="default_login")
     * @Template()
     */
    public function loginAction()
    {
        $request = $this->getRequest();
        $session = $request->getSession();

        // get the login error if there is one
        if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
                $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
        } else {
            $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
        }

        return array(
                // last username entered by the user
                'last_username' => $session->get(SecurityContext::LAST_USERNAME),
                'error'         => $error
        );
    }

    /**
     * @Route("/login_check", name="default_check")
     * 
     */
    public function loginCheckAction()
    {
        //Security Layer
    }

    /**
     * @Route("/logout", name="default_logout")
     */
    public function logoutAction()
    {
        //Security Layer
    }

}
DefaultController.php
namespace Epika\ClubBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Security\Core\SecurityContext;

/**
 * Default controller.
 *
 */
class DefaultController extends Controller
{


    /**
     * @Route("/login", name="default_login")
     * @Template()
     */
    public function loginAction()
    {
        $request = $this->getRequest();
        $session = $request->getSession();

        // get the login error if there is one
        if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
                $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
        } else {
            $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
        }

        return array(
                // last username entered by the user
                'last_username' => $session->get(SecurityContext::LAST_USERNAME),
                'error'         => $error
        );
    }

    /**
     * @Route("/login_check", name="default_check")
     * 
     */
    public function loginCheckAction()
    {
        //Security Layer
    }

    /**
     * @Route("/logout", name="default_logout")
     */
    public function logoutAction()
    {
        //Security Layer
    }

}
以我的形式,我有

<form name="loginForm" action="{{ path('default_check') }}" method="POST" enctype="text/plain">
<input type="text" name="_username" placeholder="Nombre de Usuario" />
<input type="password" name="_password" placeholder="Tú Contraseña" />
<input type="checkbox" name="_remember_me" />
<input type="hidden" name="_target_path" value="/index" />
<a href="javascript:submit()"><img src="{{ asset('bundles/epikaclub/images/entrar.png') }}" /></a>
<script type="text/javascript">
function submit()
{
    document.loginForm.submit();
}
</script>

函数提交()
{
document.loginForm.submit();
}
好的,伙计们,非常感谢你们的帮助,问题是登录表单enctype设置为

<form name="loginForm" action="{{ path('login_check') }}" method="post" enctype="text/plain">

这导致请求为空:很抱歉,一旦我将其设置为

<form name="loginForm" action="{{ path('login_check') }}" method="post" enctype="application/x-www-form-urlencoded">


它工作得很好,现在我必须与条令实体提供者检查它,看看它是如何运行的:D

您可能需要调整您的登录路径,并检查路径值是否为实际的URL路径,如下所示:

firewalls:
    [...]
    main:
        [...]
        form_login:
            login_path: /login
            check_path: /login_check

Sam

与其他选项不同,
检查路径
不支持路由名称。将其设置为类似于
/login\u check
的路径我相信您需要:

  • 使用实际的URL(就像其他人在这里说的那样,即“/login\u check”)
  • 不要为登录检查路由创建控制器。我甚至不认为这条路线本身是必要的。Symfony2将看到“/login\u check”请求并自动拦截它
这里的一个旁注对此进行了解释:


“坏凭证”错误,即使在输入正确的信息时,也只是指向某个地方发生的错误。检查错误日志,如果它仍然不能与我上面提到的工作,并让我们知道

我这样做了,我一直收到错误的凭据消息,但是当我使用路由名称时,我得到一个异常,说登录检查路由与防火墙的模式不匹配:s,所以我有点困惑>>使用URL是正确的方法-错误可能只是会话中需要清除的某个错误?即使成功登录并注销,您仍然会收到错误消息吗?我从未成功登录,它只会始终将我发送回带有错误凭据消息的登录页面,即使我使用了一个好的组合,我也会编辑它,并且我不会一直返回带有错误凭据消息的登录页面,会不会是会议中出了什么问题?我需要配置其他东西吗?由于调试,我发现重定向到login_检查是使用我在登录表单中提供的数据进行的,但不知何故会话没有得到修改或存储,我该怎么办??