2016-09-10 44 views
0

有沒有辦法讓網址被重定向到登錄網址?Silex安全提供商從登錄路線獲取引薦網址

這裏是上下文,所以你知道我爲什麼問這個問題。我從顯示我正在使用的代碼開始。這是怎麼了註冊安全提供者:

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
    'security.firewalls' => array(
     'client' => array(
      'pattern' => '^/(en|fr)/client', 
      'form' => array('login_path' => "/fr/login", 'check_path' => "/fr/client/login_check"), 
      'users' => function() use ($app) { 
       return new UserProvider($app['pdoqueries']); 
      }, 
      'logout' => array('logout_path' => '/logout', 'invalidate_session' => true), 
      ), 
     ) 
)); 

注意這裏,我確保英語和法語的URL(/ EN /客戶端和/ FR /客戶端)。我沒有找到一種方法讓login_path指向正確的區域設置的正確登錄網址,所以我將它硬編碼到法文網址。

現在這裏是登錄路由:

$app->get('/{_locale}/login', function(Request $request) use ($app, $arrConfig) { 
    $referer = $request->headers->get('referer'); 
    error_log(__FILE__ . ": " . __LINE__ . ": " . __FUNCTION__ ."  : " . var_export($referer, true)); 
    return $app['twig']->render('auth/form.twig', array(
     'error'   => $app['security.last_error']($request), 
     'last_username' => $app['session']->get('_security.last_username'), 
     'title'   => 'Login', 
     'assetsUrl'    => $arrConfig['assets_url'] 
    )); 
}) 
->bind('login'); 

你可以看到,我已經嘗試從請求頭獲得引薦。它不幸的工作。 我需要一種方法來獲取用戶嘗試訪問的url,以從中獲取語言環境並在該語言環境中顯示登錄表單文本。此信息必須存儲在某處,因爲成功登錄後,用戶將被重定向到該URL。

感謝

回答

0

我認爲,你真的後是這樣的:https://stackoverflow.com/a/25651658/1741150

但如果我誤會了,這裏是引用者一些提示:

也許SilexSecurityProvider確實暴露了像Symfony這樣的設置:

firewalls: 
    main: 
     # ... 
     form_login: 
      # ... 
      use_referer: true 

(來源:http://symfony.com/doc/current/security/form_login.html#using-the-referring-url

如果沒有,你仍然可以嘗試使用好老$_SERVER['HTTP_REFERER'],但請記住,不是每個客戶設置它:

頁面的地址(如果有的話)將用戶代理引用到當前頁面 。這由用戶代理設置。並非所有用戶代理都會設置此項,有些用戶代理可以將HTTP_REFERER修改爲 功能。總之,它不能真正被信任。

http://php.net/manual/en/reserved.variables.server.php