2013-07-01 28 views
0

我有問題,在最近的Symfony2簡單的授權,Symfony2的 - 安全問題與登錄檢查

我security.yml:

安全: 編碼器: 的Symfony \分量\安全\核心\用戶\用戶:明文

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: adminpass, roles: [ 'ROLE_ADMIN' ] } 

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

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

    secured_area: 
     pattern: ^/admin 
     form_login: 
      check_path: check 
      login_path: login 
     logout: 
      path: /logout 
      target: /index 
     #anonymous: ~ 
     #http_basic: 
     # realm: "Secured Demo Area" 

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

和部分DefaultControler.php

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); 
    } 

    return $this->render('JimmyTestBundle:Default:login.html.twig', array(
     // last username entered by the user 
     'last_username' => $session->get(SecurityContext::LAST_USERNAME), 
     'error'   => $error, 
    )); 
} 

public function checkAction() 
{ 

} 

我從symfony網站上下了一本書,checkAction應該是由防火牆層解釋的,但是當我嘗試登錄時,可能不會像這樣。

控制器必須返回一個響應(null給出)。你忘了在控制器的某個地方添加一個return語句嗎? 500內部服務器錯誤 - LogicException

我login.html.twig也幾乎複製和教程粘貼。有什麼建議?

+0

它可能期望您的控制器中checkAction函數的返回對象。如果你現在沒有使用它,你試過刪除嗎? – gavgavgavg

回答

0

您的「secured_area」防火牆缺少安全提供程序來實際捕獲發送到check_path的請求。商都security.providers下配置是這樣的:

providers: 
    your_provider_name: name_of_provider_service 

現在...你只有一個名爲「in_memory」一個供應商這是symfony中提供的特殊供應商。

將其添加到「secured_area」防火牆以便用於驗證發佈到check_path路由的憑證。

firewalls: 
    secured_area: 
     pattern: ^/admin 
     provider: in_memory 

...並從配置中刪除不必要的「登錄」防火牆

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

不要忘記提及您在routing.yml中控制器,你的情況是這樣

_demo_secured: 
    resource: "@JimmyTestBundle/DefaultController.php" 
    type:  annotation