2012-05-07 67 views
2

我通過我的CodeIngiter應用程序成功訪問LinkedIn API。我搬到了幾乎相同的服務器,並實現了i18n庫,它停止工作。Codeigniter/i18n URL的OAuth問題

用戶在LinkedIn上進行身份驗證後,它會返回到正確的URL,但會產生與Undefined index: oauth_verifier

開始了一系列的錯誤使用i18n library我的網址後,現在已經在第1段的兩個字母的語言代碼,如「恩」或'br'。

編輯:這是我使用的Linkedin library

我相信這是造成路由問題與_REQUEST $ [「oath_verifier」]

任何幫助是極大的讚賞設置。從控制器

摘錄:

class LinkLogin extends MY_Controller { 

function __construct(){ 

    parent::__construct(); 
    $this->load->helper('url'); 
    $this->load->model('profile_model'); 
    $this->load->model('generic_model'); 
    include_once (APPPATH.'libraries/Linkedin.php');   
} 

function index(){ 
} 

function initiate(){ 

    session_start(); 
    $this->load->helper('url'); 

    $config['linkedin_access'] = "***"; 
    $config['linkedin_secret'] = "***"; 
    $config['base_url'] = "http://www.youinapage.com/linklogin/initiate/"; 

    if ($this->uri->segment(4) == 'profile') { 
    $config['callback_url'] = "http://www.youinapage.com/linklogin/get_profile_linkedin/"; 
    } 
    if ($this->uri->segment(4) == 'resume') { 
    $config['callback_url'] = "http://www.youinapage.com/linklogin/get_resume_linkedin/"; 
    } 

function get_resume_linkedin() { 

    session_start(); 
    $this->load->library('format'); 

    $config['linkedin_access'] = "***"; 
    $config['linkedin_secret'] = "***"; 
    $config['base_url'] = "http://www.youinapage.com/linklogin/initiate/"; 
    $config['callback_url'] = "http://www.youinapage.com/linklogin/get_resume_linkedin/"; 

     # First step is to initialize with your consumer key and secret. We'll use an out-of-band oauth_callback 
$linkedin = new LinkedIn($config['linkedin_access'], $config['linkedin_secret'], $config['callback_url']); 
//$linkedin->debug = true; 


      # First step is to initialize with your consumer key and secret. We'll use an out-of-band oauth_callback 
    $linkedin = new LinkedIn($config['linkedin_access'], $config['linkedin_secret'], $config['callback_url']); 
    //$linkedin->debug = true; 

    if (isset($_REQUEST['oauth_verifier'])){ 
     $_SESSION['oauth_verifier']  = $_REQUEST['oauth_verifier']; 

     $linkedin->request_token = unserialize($_SESSION['requestToken']); 
     $linkedin->oauth_verifier = $_SESSION['oauth_verifier']; 
     $linkedin->getAccessToken($_REQUEST['oauth_verifier']); 

     $_SESSION['oauth_access_token'] = serialize($linkedin->access_token); 
     header("Location: " . $config['callback_url']); 
     exit; 
    } 
    else{ 
     $linkedin->request_token = unserialize($_SESSION['requestToken']); 
     $linkedin->oauth_verifier = $_SESSION['oauth_verifier']; // ERROR: Undefined index: oauth_verifier 
     $linkedin->access_token  = unserialize($_SESSION['oauth_access_token']); 
    } 
+0

那麼,從它的外觀來看,這是因爲'oath_verifier'沒有在會話中設置,如果您在沒有設置$ _REQUEST ['oath_verifier']'的情況下執行了兩個請求,可能會發生這種情況。或者直接去控制器而不要求'oath_verifier'。你爲什麼要檢查它是否在'$ _REQUEST'中?我在codeigniter中從來沒有這樣做過。 – Zombaya

+0

這段摘錄究竟來自哪裏?在一個方法內或在構造函數內? – Zombaya

+0

明白了。摘錄來自我創建的CodeIgniter中的控制器,該控制器處理與正在使用的LinkedIn庫(不是我的)的所有交互。如果我發佈其他內容,會有幫助嗎?這個代碼之前都有效 - 我幾乎可以肯定,i18n庫正在影響URL解析導致問題的方式,只是沒有看到如何影響會話。 – jsuissa

回答

3

根據您的意見和崗位,我猜你想連續兩次用同樣的方法,讓你獲得登錄似乎不可思議,但不管。

但是,您使用的i18n會改變您的路線以合併語言,因此您應該更新您在控制器中設置的網址,以便也使用該語言或語言。

在codeigniter中,您應該總是嘗試使用site_url()來設置url。這樣,您可以輕鬆地將您的應用程序移植到其他域名/位置。在這種情況下,本地化庫也會改變你的網址。

你應該改變到URL的所有引用如下:

$config['base_url']  = site_url("linklogin/initiate/"); 
$config['callback_url'] = site_url("linklogin/get_resume_linkedin/"); 

要使用site_url(),你將需要URL Helper。在嘗試使用site_url()之前,應該包含該幫助器。但是你已經將它包含在你的構造函數中,所以沒有問題。

您還應該使用header(...); exit;替換爲redirect();。如果您在發送標題後死亡,codeigniter將無法完全運行,並且您的日誌不會完全完成。

redirect($config['callback_url']); // Replaces: header($config['callback_url']);exit; 
redirect('linklogin/get_resume_linkedin/'); // Alternative to above statement 

我也建議你檢查出manual檢查出內置的會話類和輸入類。

+0

Thx幫忙!我正在研究你寫的所有內容......我之前曾嘗試過site_url,結果URL是http://www.youinapage.com/en/http://www.youinapage.com/linklogin/get_resume_linkedin?oauth_token= b424eca2-8063-4c8a-8180-71f826aa8aaa&oauth_verifier = 56689'這就是爲什麼我覺得國際圖書館是罪魁禍首。 – jsuissa

+0

再次感謝 - 一旦我正確應用了您的所有建議,一切都會解決。 – jsuissa

+0

:-)沒問題。 – Zombaya