2012-07-23 28 views
1

我可以用FOSFacebookBundle登錄,一切正常。但是,FOSUserBundle似乎不起作用,因爲Profiler顯示用戶名:anon和角色:{}。並且,在數據庫中沒有關於登錄用戶的用戶數據。也許,我不明白它是如何工作的。請幫忙。FOSFacebookBundle的作品,但FOSUserBundle似乎並不工作

這是我config.yml

fos_user: 
db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel' 
firewall_name: public 
user_class: Trade\TradeBundle\Entity\User 

fos_facebook: 
    file: %kernel.root_dir%/../vendor/facebook/src/base_facebook.php 
    alias: facebook 
    app_id: my_app_id 
    secret: app_secret_key 
    cookie: true 
    permissions: [user_about_me] 

services: 
fos_facebook.auth: 
    class: Trade\TradeBundle\Security\User\Provider\FacebookProvider 
    arguments: 
     facebook: "@fos_facebook.api" 
     userManager: "@fos_user.user_manager" 
     validator: "@validator" 
     container: "@service_container" 

這是我security.yml

security: 
factories: 
    - "%kernel.root_dir%/../vendor/bundles/FOS/FacebookBundle/Resources/config/security_factories.xml" 

role_hierarchy: 
    ROLE_ADMIN:  ROLE_FACEBOOK 
    ROLE_SUPER_ADMIN: ROLE_ADMIN 

providers: 
    my_fos_facebook: 
     id: fos_facebook.auth 

firewalls: 
    public: 
     pattern: ^/.* 
     fos_facebook: 
      app_url: "app_url" 
      server_url: "server_url" 
      login_path: /user/login 
      check_path: /user/login_check 
      default_target_path:/
      provider: my_fos_facebook 
     anonymous: true 
     logout: 
      handlers: ["fos_facebook.logout_handler"] 

下面的代碼似乎沒有工作,因爲當我與Facebook的setTimeout(goLogIn,500登錄)函數裏面如果沒有被調用。

function goLogIn(){ 
    window.location.href = "{{ path('user_login_check') }}"; 
} 

function onFbInit() { 
    if (typeof(FB) != 'undefined' && FB != null) { 
     FB.Event.subscribe('auth.statusChange', function(response) { 
      if (response.session || response.authResponse) { 
       setTimeout(goLogIn, 500); 
      } else { 
       window.location.href = "{{ path('_security_logout') }}"; 
      } 
     }); 
    } 
} 

這些都是我的控制器操作:

/** 
* @Route("/user/login", name = "user_login") 
*/ 
public function loginAction() 
{ 

} 

/** 
* @Route("/user/login_check", name = "user_login_check") 
*/ 
public function loginCheckAction() 
{ 

} 

回答

0

我猜你存儲,因爲您的權限要求的空數據:

permissions: [user_about_me] 

我建議更改到教程推薦:

permissions: [email, user_birthday, user_location] 
+0

首先,非常感謝您的回覆。我按照你的說法改變了權限。但是,沒有任何改變。 – Sukhrob 2012-07-24 03:15:43

3

I n階爲FOSUserBundle與FOSFacebookBundle一起工作,你需要在security.yml指定只是爲Facebook登錄特定的登錄路徑:

public: 
    fos_facebook: 
     check_path: /loginFacebook 

當然,你將需要在routing.yml正確地指向這條路線:

_security_check: 
pattern: /loginFacebook 

然後,你需要改變在Facebook上的JavaScript檢查網址:

function goLogIn(){ 
    window.location.href = "{{ path('_security_check') }}"; 
} 

的最後一件事是CRE吃了控制器和新航線的動作(這是非常重要的,否則它不會工作),讓它空:

public function loginFacebookAction() 
{ 
    return array(); 
} 

當然,你會需要這個適應您的需求,像在那裏我使用DefaultController,你,顯然,使用UserController

希望它有幫助。

+0

謝謝你的回覆。但是,我已經做到了。對不起,沒有提前顯示它。我有一個控制器和兩個check_path和login_path的動作。我加了他們。 – Sukhrob 2012-07-25 18:46:41

+0

它應該工作。 – 2012-07-26 12:59:29