2

我正在使用 Symfony 2.6.6。还有我的结构文件夹

ExampleBundle
   Controller
       LoginController.php
       Other1Controller.php
       Other2Controller.php
       ...

LoginController已经loginAction()并且loginCheckAction()
LoginAction()将显示登录表单并loginCheckAction()进行检查。

我看到一些教程来创建LoginController.php. 用户登录后通过检查我设置:

$session->set('login', $login);

我的目的是:所有用户必须登录才能访问我的网络应用程序的所有页面。

但是我的网站有很多控制器和操作(页面)。

我的想法是:检查所有控制器的所有操作中是否存在“登录”会话,如果不存在则重定向到登录操作。

但我认为这太手动了。Symfony 最好的方法是什么?

更新 1:
之后我尝试在我的security.yml文件中添加一些代码。如果用户未登录,它会重定向到登录页面,但它总是重定向到登录页面。我想如果用户登录(有“登录”部分)它可以访问其他页面。怎么做 谢谢

# .../security.html
security:
    firewalls:
       ex_login:
            pattern:  ^/ex/login$
            anonymous: ~
            security: false
        secured_area:
            pattern:    ^/ex
            form_login:
                check_path: /ex/logincheck
                login_path: /ex/login
            logout:
                path: /ex/logout
                target: /ex

更新 2
这是我的Login Controller

       loginAction() {
           $session = $this->getRequest()->getSession();
           if ($session->has('login')) {
               //redirect to home/index
           }else {
               //render login form
           }
       }
       logincheckAction(Request $request) {
           if($request->getMethod()=='POST') {
                // check user input (username && password) in database
                if (ok){
                     $session->set('login', 'true');
                     //redirect to home/index
                }
                else {
                     //redirect to login/index
                }
           }else {
                //redirect to login/index
           }
       }
       logoutAction() {
           //remove login session
           // redirect to login/index
       }

这是我的 Other1Controller.php

indexAction(){
   echo 'page1';
}

它总是重定向到登录页面。在我填写我的字段并提交登录后,它仍然重定向到登录页面?我该如何解决谢谢。

4

2 回答 2

2

我的想法是保护所有 url,除非某些必需品 url 作为登录和注销

 access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_ADMIN }
    - { path: ^/, role: ROLE_USER }

确保每个用户至少有 ROLE_USER

于 2015-04-21T20:02:35.320 回答
-1

查看防火墙组件。您可以在需要登录用户时进行自动重定向。

官方文档

于 2015-04-18T15:27:10.663 回答