0

我們嘗試使用PHP SDK將用戶登錄到Codeigniter應用程序,我們使用分段的URI並且不需要查詢字符串,因此我們選擇不使用使用它們。 CI和Facebook似乎存在的一個問題是將redirect_uri參數傳遞給getLoginUrl() e.x.Codeigniter,Facebook和Facebook的登錄「代碼」查詢變量

public function login(){ 
    if(!$this->user){ 
     $this->data['loginUrl'] = $this->facebook->getLoginUrl(array(
      'redirect_uri' => 'http://appdomain.com/users/login' 
     )); 
     $this->load->view('users/login', $this->data); 
    }else{ 
     redirect('home/index'); 
    } 
} 

登錄到Facebook上後,返回的URI有一個code查詢變量CI不喜歡,它本質上打破了路由,並顯示一個空白頁。

http://appdomain.com/users/login/?code=dsfeoilkjd983274893hflksdfhhewhkdsiue8... 

即使我添加到$route['users/login/(:any)'] = 'users/login';routes.php,我仍然重定向到一個空白頁。 Since we are using getAccessToken()代表用戶進行API調用,我們不需要使用code query var來交換訪問令牌。是否有可能在將其路由到method/action之前完全刪除查詢字符串,可能在MY_Controller

我能夠繞過這個問題的唯一方法是將默認控制器傳遞給redirect_uri參數,其他所有內容都不會路由到正確的URI並只顯示一個空白頁。

任何建議將不勝感激!

回答

1

您可以使用.htaccess刪除查詢字符串。不知道它是否會起作用,但是如果該功能做了實際的重定向,即登錄過程正在將用戶發送給http://appdomain.com/users/login/?code=dsfeoilkjd983274893hflksdfhhewhkdsiue8...,那似乎是這種情況。

.htaccess會(除了刪除index.php)剝離查詢字符串併發送URL http://appdomain.com/users/login/?code=dsfeoilkjd983274893http://appdomain.com/users/login/

RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 
RewriteCond %{QUERY_STRING} !="" 
RewriteRule ^(.*)$ $1? [R,L] 

最後一行的R似乎是可選的。如果將其保留,URL仍會在URL中顯示查詢字符串,但不會被解析。如果將其放入,它將不會在URL中顯示查詢字符串。

+0

感謝您的迴應!但是,這給我一個內部服務器錯誤。我使用.htaccess刪除index.php文件,我使用和不使用RewriteCond $ 1!(index \ .php | images | robots \ .txt)進行測試 RewriteRule ^(。*)$ /index.php/$1 [L]',結果相同 – dcd0181

+0

在第一行更新了答案 - need'!=「」''。還調整了'[L]',因爲它會告訴htaccess停止解析,並且如果它低於其他規則,則不會解析查詢字符串Cond。 – stormdrain