簡體   English   中英

登錄成功后重定向+ Silex

[英]Redirect after login succes + Silex

我想做的是檢查有人登錄時是否有cookie。 當他們有我想要將它們重定向到$cookie_data/dashboard

因為當您在我的服務器上選擇一種語言時,會設置一個cookie。 所以我想將它們重定向到$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

我怎樣才能完成這項工作或什么是最佳實踐?

我不確定這是否正確,但我相信你必須返回另一個實例的對象,請參閱這個問題以獲取詳細信息(尤其是igorw的答案)

另一種選擇是攔截調度程序的AUTHENTICATION_SUCCESS事件,我嘗試了以下方法:

$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');
});

在日志中我成功看到了cookie,沒有任何錯誤,但重定向也不起作用! 檢查日志(MONOLOG)后,我看到在嘗試訪問我的安全區域( /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_check POST (authenticate)
  3. http://localhost:8888/silex-skeleton/web/index_dev.php/admin GET (重定向回原來請求的url)

在中間/login_check請求上調用身份驗證事件,並且返回不同的值似乎對整體結果沒有任何影響,至少我沒有設法做到這一點。 我想知道為什么你不重定向你的ROUTE HANDLER功能??? 結果將是相同的,至少如果我正確地理解了這個問題。 例如,將您的代碼放在安全區域的處理程序中,例如:

$app->get('/dashboard', function() use ($app) {
    $request = $app['request'];
    $cookies = $request->cookies;
    if($cookies->has("language"))
    {
        return $app->redirect('/nl/dashboard');
    }
    return new Response(.....)
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM