不是symfony2中的authanticat用户

时间:2013-09-16 09:18:52

标签: symfony

我是symfony2的新手,我正在尝试学习symfony2中的登录页面但是系统给了我这个错误

  

安全上下文不包含身份验证令牌。一个可能的原因可能是没有为此URL配置防火墙。

我的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:
            memory:
                users:
                    user:  { password: userpass, roles: [ 'ROLE_USER' ] }
                    admin: { password: admin, roles: [ 'ROLE_ADMIN' ] }

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false 


        login:
            pattern:  ^/demo/secured/login$
            security: false

        emp:
            pattern:    ^/emp
            form_login:
                check_path: acme_radixemp_logincheck
                login_path: acme_radixemp_login
            logout:
                path:   acme_radixemp_logout
                target: demo
            #anonymous: ~
            #http_basic:
            #    realm: "Secured Demo Area"

    access_control:
         - { path: ^/emp, roles: ROLE_ADMIN }

我正在尝试从网址

运行/emp

我在控制器中的登录功能是:

public function loginAction(Request $request)
{
    $login = new user();
    $form = $this->createFormBuilder($login)
        ->add('Username','text',array('attr' => array('size' => '50',"value"=>"",'class'=>'form-control','placeholder'=>"Please Enter Your Username")))
        ->add('Password', 'password',array('attr' => array('size' => '50',"value"=>"",'class'=>'form-control','placeholder'=>"Enter Your Password")))
        ->add('login', 'submit',array('attr' => array('class    '=>"btn btn-success btn-lg","style"=>"margin-top:15px")))
        ->getForm()
    ;

    $form->handleRequest($request);
    $session = $this->getRequest()->getSession();
    $url = $this->generateUrl("emp");
    $loginurl = $this->generateUrl("acme_radixemp_login",array("login"=>"fail"));

    $postData = $request->request->get('form');
    if(!empty($postData)) {

        $repository = $this->getDoctrine()->getRepository('AcmeRadixempBundle:user');
        $user_name = $repository->findOneBy(array('username' => $postData['Username'],'password'=>$postData['Password']));

        if($user_name=="") {
            return $this->redirect($loginurl);
        } else {
            //$this->get('security.context')->isGranted('ROLE_ADMIN'); 

            if(TRUE ===$this->get('security.context')->isGranted('ROLE_ADMIN') )
            {
                $session->set('username', $postData['Username']);
                return $this->redirect($url);
            }
        }
    }
}

    return $this->render('AcmeRadixempBundle:Default:login.html.twig',array('login'=> $form->createView()));

}

我忘了做什么?

1 个答案:

答案 0 :(得分:2)

您的check_path和login_path不是标准的。如果未实施您的设置操作并且未注册正确的路径,则您的登录功能将无效。

我建议你按照Symfony书中的例子进行操作:

Using a Traditional Login Form

我一步一步地跟着它,它立即起作用。对于简单登录,您根本不需要创建loginAction或logoutAction,Symfony将为您完成所有操作。您需要创建的唯一内容(您可以从我发送给您的链接中复制粘贴它)是登录表单。您可以在书籍和食谱中找到所有其他更复杂的信息,这些信息都可以在Symfony网站上免费获得。

希望这有帮助。