symfony2基于手动登录

symfony2基于手动登录,symfony,login,Symfony,Login,我试图根据手册中的安全示例在symfony2中实现登录,但似乎出现了问题,它没有显示任何错误或任何消息。这是控制器: <?php namespace WN\Bundle\UsersBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\Security\Core\SecurityContext; use WN\Bundle\UsersBund

我试图根据手册中的安全示例在symfony2中实现登录,但似乎出现了问题,它没有显示任何错误或任何消息。这是控制器:

  <?php

namespace WN\Bundle\UsersBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
use WN\Bundle\UsersBundle\Entity\User;
use WN\Bundle\UsersBundle\Entity\UsersRepository;

class SecurityController extends Controller {

    public function loginAction() {

        $request = $this->getRequest();
        $session = $request->getSession();

        if($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR))
        {
            $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);

        }
        else
        {
            $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
            $session->remove(SecurityContext::AUTHENTICATION_ERROR);
        }
        return $this->render('WNUsersBundle:Security:login.html.twig',
                array('last_username' => $session->get(SecurityContext::LAST_USERNAME),
                        'error' => $error
                        ));
    }

}

?>
这是保安

jms_security_extra:
    secure_all_services: false
    expressions: true

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
        WN\Bundle\UsersBundle\Entity\User: sha256
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
         users:
            entity: { class: WNUsersBundle:User }   

    firewalls:
        login:
            pattern:  ^/login
            security: false
        secured_area:
            pattern:    ^/secured
            form_login:
                check_path: /login_check
                login_path: /login
            logout:
                path:   /logout
                target: /login
            #anonymous: ~
            #http_basic:
            #    realm: "Secured Demo Area"

    access_control:
        #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
         - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
         - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
这是login.html.twig

  {% extends '::base.html.twig' %}
    {% block content %}
    {% if error %}
    <div>{{ error.message }}</div>
    {% endif %}
    <form action="{{ path('login_check') }}" method="post">

    <label for="Username">Username</label>
    <input type="text" name="_username" id="username" value="{{ last_username }}">

    <label for="Password">Password</label>
    <input type="password" name="_password" id="password">
    <br />

    <input  type="submit" name="submit" value="Login">
    </form>

{% endblock %}

{%extends'::base.html.twig%}
{%block content%}
{%if错误%}
{{error.message}}
{%endif%}
用户名
密码

{%endblock%}
现在我得到的错误是: 找不到路径“/login\u check”的控制器。可能您忘记在路由配置中添加匹配的路由


有人知道如何解决这个问题吗?

您必须在登录控制器中定义另外两个公共函数。你不需要在它们里面放任何东西,它们只是Symfony2安全控制器机制工作的障碍

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

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

希望这对您有所帮助。

这还不太清楚。你想做什么,你期望得到什么?它与您得到的有什么不同?我正在尝试测试登录。我有一个登录表单,在其中输入用户名和密码。例如,我将字段留空,然后提交它。在视图中,我有{%if error%}{{error.message}{%endif%}$request->attributes->has(SecurityContext::AUTHENTICATION\u error)-为false和$session->get(SecurityContext::AUTHENTICATION_ERROR)为空您可以发布视图代码吗?{%extends'::base.html.twig“}{%block content%}{%if ERROR%}{{{ERROR.message}}{%endif%}用户名密码
{%endblock%}。很抱歉,我是stackoverflow新手,不知道如何在注释中格式化代码。
/**
 * @Route("/login_check", name="login_check")
 */
public function loginCheckAction()
{
}

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