Symfony 2.0 애플리케이션에 대한 symfony 기능 테스트를 작성하고 있습니다. FOSFacebookBundle (v2.0). 내가 지금처럼 인증 확인을 테스트하고있어 컨트롤러 :Symfony2 테스트에서의 가짜 인증 - 컨트롤러의 get ('security.context') -> getToken()이 TestCase에 설정된 토큰과 다른 토큰을 반환합니다.
if($this->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY')){...}
그래서 나는 시험의 $client
(유형 Symfony\Bundle\FrameworkBundle\Client
의)를 인증 할 필요가있다.
아마 내가 유효한 토큰을 생성하고이에 설정해야 $client
의 security.context
, session
, 그리고 $client
에 대한 cookieJar
가 인증되는, 맞죠?
컨트롤러의 security.context
은 테스트의 $client
에서 설정 한 유효한 토큰과 다른 토큰을 반환합니다.
요청을 한 후에 토큰이 재설정되는 이유를 아는 사람이 있습니까? 테스트 케이스에이 true
반환이 설정 한 후
use FOS\FacebookBundle\Security\Authentication\Provider\FacebookProvider;
use FOS\FacebookBundle\Security\Authentication\Token\FacebookUserToken;
use Symfony\Component\BrowserKit\Cookie;
$providerKey = 'public';
$facebookMock = $this->getMockBuilder('\Facebook')
->disableOriginalConstructor()
->getMock();
$facebookMock->expects($this->once())
->method('getUser')
->will($this->returnValue('DevTestUsername'));
$facebookProvider = new FacebookProvider($providerKey, $facebookMock);
$tokenMock = new FacebookUserToken(
'public',
'DevTestUsername',
array('ROLE_MEMBER', 'ROLE_MANAGER', 'ROLE_USER')
);
$authenticatedToken = $facebookProvider->authenticate($tokenMock);
$client->getContainer()->get('security.context')->setToken($authenticatedToken);
$client->getContainer()->get('session')->set('_security_public', serialize($authenticatedToken));
$client->getContainer()->get('session')->save();
$client->getCookieJar()->set(new Cookie(session_name(), $client->getContainer()->get('session')->getId()));
: 여기
내가 테스트 케이스 클래스에서이 설정에있어 방법
if($client->getContainer()->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY')){...}
그러나 컨트롤러
, 그것은 돌아 가기false
if($this->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY')){...}
security.context 또는 세션에서? facebook.id 서비스가
이 클래스는 페이스 북의 PHP API를 (사용 심포니 \ 구성 요소 \ 보안 \ 코어 \ 사용자 \의 UserProviderInterface를 구현하는 클래스가
security:
factories:
- "%kernel.root_dir%/../vendor/bundles/FOS/FacebookBundle/Resources/config/security_factories.xml"
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: [ROLE_USER, ROLE_ALLOWED_TO_SWITCH]
ROLE_SUPER_ADMIN: [ROLE_ADMIN]
providers:
chain_provider:
providers: [fos_userbundle, facebook_provider]
fos_userbundle:
id: fos_user.user_manager
facebook_provider:
id: facebook.user
firewalls:
public:
pattern: ^/.*
fos_facebook:
provider: facebook_provider
app_url: "http://apps.facebook.com/myapp"
server_url: "http://myapp.local/"
login_path: /login
check_path: /login_check
default_target_path: /target
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: /login
check_path: /login_check
anonymous: true
switch_user: { role: ROLE_ADMIN }
logout:
target: http://myapp.com
handlers: ["fos_facebook.logout_handler"]
context: primary_auth
: 여기
응용 프로그램의 보안 설정입니다 BaseFacebook 클래스)를 사용하여 페이스 북 그래프 api (BaseFacebook-> api ('/ me'))를 호출합니다. 그러나 이것은 결코 일어나지 않습니다.댓글, 포인터 또는 리소스에 대한 링크가 크게 감사드립니다. 감사!
의견을 보내 주셔서 감사합니다.하지만 FB 토큰이 아닙니다. 문제는 Symfony의 보안 계층을 지나치는 것이 아니라는 것입니다. FB의 토큰 디버거를 확인했는데, 그것에 대해 잘 알고 있습니다.) – gtb