简体   繁体   English

使用Symfony Security的简单登录表单

[英]Simple login form with Symfony Security

I tried to do login form with this tutorial: http://symfony.com/doc/current/cookbook/security/form_login_setup.html 我尝试使用本教程进行登录表单: http//symfony.com/doc/current/cookbook/security/form_login_setup.html

So, now my security.yml file looks like: 所以,现在我的security.yml文件看起来像:

security:
    providers:
        in_memory:
            memory:
                users:
                    ryan:
                        password: ryanpass
                        roles: 'ROLE_USER'
                    admin:
                        password: kitten
                        roles: 'ROLE_ADMIN'

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

    firewalls:
        login_firewall:
            pattern:   ^/login$
            anonymous: ~
        secured_area:
            pattern:    ^/
            anonymous: ~
            form_login:
              login_path: login
              check_path: login
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: ROLE_USER }

Security Controller: 安全控制器:

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(
            'AppBundle:Security:login.html.twig',
            array(
                // last username entered by the user
                'last_username' => $lastUsername,
                'error'         => $error,
            )
        );
    }

}

So basically, it doesn't work properly. 所以基本上,它不能正常工作。 After sending login form nothing happens and I don't know why. 发送登录表后没有任何反应,我不知道为什么。 I think the configuration of the security is wrong. 我认为安全性的配置是错误的。 Could somebody help me? 有人能帮帮我吗? I have no idea what is wrong. 我不知道出了什么问题。

Change the check_path to something else, like login_check and also add the login_check and logout action to your controller: check_path更改为其他内容,例如login_check ,并将login_checklogout操作添加到控制器:

/**
 * @Route("/login_check", name="login_check")
 */
public function loginAction()
{
    // The security layer will intercept this request, else redirect to login page
    $this->addFlash('warning', $this->get('translator')->trans('login_expired'));
    return $this->redirect($this->generateUrl('login'));
}

/**
 * @Route("/logout", name="logout")
 */
public function logoutAction()
{
    // The security layer will intercept this request, else redirect to login page
    $this->addFlash('warning', $this->get('translator')->trans('login_expired'));
    return $this->redirect($this->generateUrl('login'));
}

Also make sure that the login_form does a post to the login_check : 还要确保login_form为login_check

<form id="loginForm" action="{{ path('login_check') }}" method="post">

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM