2013-04-05 29 views
6

Khi tôi tiêm security.context phục vụ symfony2 của tôi (phần mở rộng cành lá) được lỗi sau xuất hiện:dùng Symfony2 truy cập từ dịch vụ mở rộng cành lá

Gọi để một hàm thành viên getUser() trên một tổ chức phi vật thể. ....

class GeninnoShareboardExtension extends \Twig_Extension { 
    public function __construct(ContainerInterface $container, SecurityContext $context) { 
     $this->doctrine = $container->get('doctrine'); 
     $this->context = $context; 
    } 

    public function getUser() { 
     return $this->context->getToken()->getUser(); 
    } 

    ........ 
} 

services.yml của tôi trông như thế này:

services: 
    geninno.twig.extension.dashboard: 
    class: Geninno\EDSBundle\Twig\Extension\GeninnoShareboardExtension 
    arguments: 
     container: "@service_container" 
     service: "@security.context" 
    tags: 
    - { name: twig.extension } 

Một người dùng i s đăng nhập và thiết lập tường lửa của tôi là như thế này:

access_control: 
    - { path: ^/secured/register, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/secured/create, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/secured/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/, roles: [IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED] } 

Trả lời

1

Tôi giải quyết nó bằng cách thêm một nếu các cuộc gọi SecurityContext của tôi . Kiểm tra nếu GetToken() trả lại một đối tượng (chứng thực) hoặc chuỗi (nặc danh)

if (is_object($this->context->getToken())) 
{ 
    .... // getUser() etc. 
} 
2

Bạn nên cố gắng

services: 
    geninno.twig.extension.dashboard: 
    class: Geninno\EDSBundle\Twig\Extension\GeninnoShareboardExtension 
    arguments: [@service_container, @security.context] 
    tags: 
    - { name: twig.extension } 
+0

Cảm ơn bạn nhưng nó không giải quyết vấn đề – Raymen

1

là trang web mà bạn đang nhận lỗi phía sau một tường lửa? Nếu không thì nó sẽ không có quyền truy cập vào mã thông báo bảo mật. Bạn sẽ cần phải đặt trang phía sau tường lửa và sau đó mở nó cho người dùng chưa được xác thực.

một cái gì đó như thế này nên làm các trick để mở trang lên cho người dùng không được thẩm định, nhưng vẫn còn có nó bên trong một bức tường lửa (security.yml)

access_control: 
    - { path: /lost_password, roles: IS_AUTHENTICATED_ANONYMOUSLY} 
+0

Cảm ơn bạn nhưng tất cả các trang của tôi có nghĩa vụ phải được đằng sau một bức tường lửa, kiểm tra của tôi câu hỏi được cập nhật với cài đặt tường lửa của tôi – Raymen

Các vấn đề liên quan