2013-03-18 134 views
0

使用symfony2.1和FOSFacebookBundle:身份驗證訪問控制ROLES

如果用戶正在輸入www.example.com,用戶關閉了他的瀏覽器,然後如果他仍然通過身份驗證,我想要重定向到www.example.com/secured。

如果用戶通過身份驗證,我無法進入indexAction。

我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: adminpass, roles: [ 'ROLE_ADMIN' ] } 
    my_fos_facebook_provider: 
      id: my.facebook.user 
       //How can I add here a ROLE_USER? 

firewalls: 

    //standard thing from FosFacebookBundle 

access_control: 
    - { path: ^/, roles: [IS_AUTHENTICATED_ANONYMOUSLY] } 

我的indexAction:

if($this->container->get('security.context') 
    ->isGranted('IS_AUTHENTICATED_FULLY')){ 
    echo 'asdf'; //this is working in the secured area www.example.com/secured/ 
} 

我的錯誤信息:安全上下文不包含身份驗證令牌。一個可能的原因可能是沒有爲此URL配置防火牆。

在安全區域,用戶沒有角色。我該如何改變它?

出了什麼問題?

UPDATE

namespace Frontend\FbAccountBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* User 
* 
* @ORM\Table(name="user") 
* @ORM\Entity 
*/ 
class User 
{ 
/** 
* @var integer 
* 
* @ORM\Column(name="id", type="bigint", nullable=false) 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $id; 

/** 
* @var integer 
* 
* @ORM\Column(name="facebook_id", type="bigint", nullable=false) 
*/ 
private $facebookId; 
/** 
* @param Array 
*/ 
public function setFBData($fbdata) 
{ 
    if (isset($fbdata['id'])) { 
     $this->setFacebookId($fbdata['id']); 
     $this->addRole('ROLE_FACEBOOK'); 
    } 
} 

security.yml:

services: 
my.facebook.user: 
    class: Frontend\FbAccountBundle\Security\User\Provider\FacebookProvider 
    arguments: 
     facebook: "@fos_facebook.api" 
     userManager: "@fos_user.user_manager" 
     validator: "@validator" 
     container: "@service_container" 

回答

0

你需要寫一個用戶提供給角色添加到您的用戶。這包括在FOSFacebookBundle文檔中。查看頁面底部附近的用戶實體上的服務定義和setFBData方法。這應該給你一個堅實的開始。

Integration with FOSUserBundle

+0

這是我做的,但由於我的實體我無法擴展它。我更新了我的代碼。 – craphunter 2013-03-18 17:52:52