2012-01-11 63 views
1

讓我在提問之前解釋情況。我有一個網站domain.com。頁面sub.domain.com需要用戶登錄才能訪問。如果我允許訪問提供表單的sub.domain.com/login,該表單的操作是domain.com/login,則會將數據發送到domain.com/login,並像它應該那樣將其重定向回sub.domain.com/login。但是,如果我嘗試訪問sub.domain.com(需要身份驗證),它會正確重定向到domain.com/login,但登錄後不會重定向回到sub.domain.com。我發現錯誤是未登錄時的重定向不發送referrer頭。有沒有一種方法可以使用戶試圖訪問需要驗證的子域上的頁面,將其重定向到domain.com/login,然後返回到原來的位置?cakephp auth重定向和引薦者

回答

0

好吧,這一切曾與路線做。我終於能夠得到它在我的routes.php文件文件中設置了一個switch語句工作:

switch(Configure::read('subdomain')) 
{ 
    case 'subdomain': 
      Router::connect('/login', array('controller'=>'users', 'action'=>'login')); 
} 

併成立了我的引導,像這樣:

preg_match('/^(?:www\.)?(?:(.+)\.)?(.+\..+)$/i', env('HTTP_HOST'), $matches); 
$subdomain = empty($matches[1]) ? false : $matches[1]; 
if(strlen($subdomain) > 0 && $subdomain != "www") 
{ 
    if($subdomain == 'api') 
     $_GET["url"] = $subdomain . "/" . (isset($_GET["url"]) ? $_GET["url"] : ""); 
    Configure::write('subdomain', $subdomain); 
} 
0

重定向總是需要重定向回到sub.domain.com嗎?如果是這樣,我建議將AuthComponents loginRedirect屬性設置爲您希望用戶重定向到的位置。看到這個頁面:http://book.cakephp.org/1.3/en/view/1270/loginRedirect

此外,該頁面表示CakePHP會自動存儲您在會話中登錄之前訪問的控制器 - 操作對。所以也許你還應該檢查你的會話是否在domain.com和sub.domain.com之間共享。

最後一條評論:登錄後發生了什麼?你是否重定向到domain.com上的控制器/操作,或者根本沒有重定向?

注:我假設你正在使用CakePHP 1.3,並使用AuthComponent在登錄用戶

+0

它應該將您重定向回哪裏你是,但它只是重新定向到登錄頁面。我的會話在這兩者之間共享,因爲一旦我登錄,我可以再次手動轉到sub.domain.com並訪問它。我正在使用CakePHP 1.3和AuthComponent – LordZardeck 2012-01-11 15:28:02

+0

它實際上是否將您重定向到登錄頁面,還是重定向回到子域,然後將您重定向回登錄頁面? (這可能會如此之快,你不會注意到) 你可以找到通過使用httpfox(火狐擴展),它會告訴你所有的頭正在發送。 – Joep 2012-01-11 19:34:14

+0

我重定向到'/'。發現,它與子域有關。 sub.domain.com是cakephp的'/'。蛋糕不區分domain.com和sub.domain.com – LordZardeck 2012-01-11 20:00:39