2012-06-02 29 views
2

我是Symfony2的新手,我試圖創建一個基本註冊+登錄系統。所以,用Symfony2的文檔的幫助下,我創建了這個security.yml:Symfony2身份驗證「login_check」路徑找不到

security: 
    encoders: 
     TestCompany\InternetBundle\Entity\Member: 
      algorithm:  sha1 
      encode_as_base64: false 
      iterations:  1 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ] 

    providers: 
     administrators: 
      entity: { class: TestCompanyInternetBundle:Member, property: username } 

    firewalls: 
     admin_area: 
      pattern: ^/admin 
      anonymous: ~ 
      form_login: 
       login_path: /login 
       check_path: /login_check 

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

,我用這個路由吧:

login_check: 
    pattern: /login_check 
login: 
    pattern: /login 
    defaults: { _controller: TestCompanyInternetBundle:Admin:login } 

根據http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form我不需要實施控制器login_check路由。然而,Symfony將這個錯誤返回給我:

Unable to find the controller for path "/login_check". Maybe you forgot to add the matching route in your routing configuration? 

你看到什麼我可以做錯了嗎?登錄頁面幾乎與文檔中使用的完全相同。該錯誤發生在頁面上:http://localhost/SymfonyTest/web/app_dev.php/login_check,這是我在使用登錄表單後發送到的頁面。

回答

1

我會建議您使用FOSUserBundle,因爲這似乎做你想要做什麼的最快方法:FOSUserBundle

安裝是非常直接和將讓你得到你的應用程序在一個非常工作時間短。祝你好運!

編輯:

你能張貼您的控制器TestCompanyInternetBundle:管理員:登錄?你控制器是否擴展了安全控制器?

0

你還應該包括你的security.yml。確保你有:

firewalls: 
    login_firewall: 
     pattern: ^/login$ 
     anonymous: ~ 

在你的security.yml中。這是一個常見的陷阱。

3

http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form

確保/login_check位於防火牆後面。

因此,在您的示例中,您爲安全區域指定了/ admin的前綴,因此您的登錄檢查路由也應該包含該前綴,例如/ admin/login_check

接下來,確保您的check_path URL(例如/ login_check)位於您用於表單登錄的防火牆之後(在本例中,單個防火牆匹配所有URL,包括/ login_check) 。如果/ login_check與任何防火牆不匹配,您將收到無法找到路徑「/ login_check」異常的控制器。

security.yml配置:

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

    secured_area: 
     pattern: ^/ 
     form_login: 
      login_path: /login 
      check_path: /login_check 
     logout: 
      path: /demo/secured/logout 
      target: /demo/ 
     anonymous: ~ 

    .... 

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

補充信息可在http://stackoverflow.com/questions/17406446/how-does-the-login-check-path-route-work-without-找到默認的控制器行動 –