2014-04-14 1 views
1

내가하고 싶은 것은 누군가 쿠키가 있다면 로그인했는지 확인하는 것이다. 그들이 가지고있을 때 $cookie_data/dashboard으로 리디렉션하고 싶습니다.로그인 후 리다이렉트 succes + Silex

내 서버에서 언어를 선택하면 쿠키가 설정되기 때문에. 그래서 $language/dashboard으로 리디렉션하고 싶습니다.

$app['security.authentication.success_handler.secured_area'] = $app->share(function() use ($app) { 
    $request = $app['request']; 
    $cookies = $request->cookies; 
    if($cookies->has("language")) 
    { 
     return $app->redirect('/nl/dashboard'); 
    } 
}); 

를하지만 나에게 오류를 제공합니다 :

지금이

Warning: array_map(): An error occurred while invoking the map callback in /Applications/MAMP/htdocs/pst/vendor/silex/silex/src/Silex/Provider/SecurityServiceProvider.php on line 264 

Fatal error: Uncaught exception 'RuntimeException' with message 'Accessed request service outside of request scope. Try moving that call to a before handler or controller.' in /Applications/MAMP/htdocs/pst/vendor/silex/silex/src/Silex/Application.php:141 Stack trace: #0 /Applications/MAMP/htdocs/pst/vendor/pimple/pimple/lib/Pimple.php(83): Silex\Application->Silex\{closure}(Object(Silex\Application)) #1 /Applications/MAMP/htdocs/pst/app/bootstrap.php(67): Pimple->offsetGet('request') #2 /Applications/MAMP/htdocs/pst/vendor/pimple/pimple/lib/Pimple.php(126): {closure}(Object(Silex\Application)) #3 /Applications/MAMP/htdocs/pst/vendor/pimple/pimple/lib/Pimple.php(83): Pimple::{closure}(Object(Silex\Application)) #4 /Applications/MAMP/htdocs/pst/vendor/silex/silex/src/Silex/Provider/SecurityServiceProvider.php(409): Pimple->offsetGet('security.authen...') #5 /Applications/MAMP/htdocs/pst/vendor/pimple/pimple/lib/Pimple.php(126): Silex\Provider\SecurityServiceProvider->Silex\Provider\{closure}(Object(Silex\Application)) #6 /A in /Applications/MAMP/htdocs/pst/vendor/silex/silex/src/Silex/Application.php on line 141 

가 어떻게이 일을하거나 가장 좋은 방법은 무엇입니까?

답변

3

나는이 올바른지 확실하지 않다,하지만 난 당신이 세부 사항에 대한 this question 또 다른 옵션은의 AUTHENTICATION_SUCCESS 이벤트를 차단하는 것입니다

(igorw 특히 대답)를 참조하십시오, 다른 인스턴스의 객체를 반환해야 생각 로그에서

$app['dispatcher']->addListener(AuthenticationEvents::AUTHENTICATION_SUCCESS 
     , function($authEvent) use ($app) { 
    $request = $app['request']; 
    $cookieKeys = $request->cookies->keys(); 
    $app['monolog']->addInfo('Available cookies are: ' . implode(', ', $cookieKeys)); 
    return $app->redirect('SOME_URL_HERE'); 
}); 

내가 성공적으로 쿠키를보고,이 오류는 아니지만, 리디렉션 중 하나가 작동하지 않습니다 디스패처, 나는 다음과 같은 시도! 로그 (독백)을 검사 한 후 나는 다음 루트는 /admin 내 보안 영역에 접근 할 때 호출되는 것을 보았다

  1. http://localhost:8888/silex-skeleton/web/index_dev.php/login을 GET을
  2. http://localhost:8888/silex-skeleton/web/index_dev.php/admin/login_checkPOST을 (양식을 로그인 리디렉션)
  • http://localhost:8888/silex-skeleton/web/index_dev.php/admin을 GET (원래 요청 된 URL로 다시 리디렉션) (인증)

    인증 이벤트가 중간 /login_check 요청에 대해 호출되고 다른 값을 반환해도 전체 결과에 영향을 미치지 않는 것 같습니다. 최소한이 작업을 수행하지는 않았습니다. 내가 궁금해하는 것은 왜 ROUTE HANDLER 함수에서 리다이렉트하지 않는가이다. 적어도 질문을 올바르게 이해하면 그 결과는 같을 것입니다. 예를 들어 보안 영역의 핸들러에 코드를 넣으려면 다음과 같이 입력하십시오.

  • 관련 문제