OAuth与Codeigniter / i18n网址有关

时间:2012-05-07 18:18:46

标签: php codeigniter oauth linkedin

我通过CodeIngiter应用程序成功访问了LinkedIn API。我搬到了一个几乎相同的服务器并实现了i18n库,它已经停止工作了。

用户在LinkedIn上进行身份验证后返回正确的网址,但会生成一系列以Undefined index: oauth_verifier

开头的错误

使用i18n library我的网址后,现在第一段中有两个字母的语言代码,例如'en'或'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']);
   }

1 个答案:

答案 0 :(得分:3)

根据你的评论和帖子,我猜你试图连续两次使用相同的方法,所以你登录。看起来很奇怪,但无论如何。

您使用的i18n会更改您的路线以加入语言,因此您应该更新您在控制器内设置的网址,以便使用该语言或语言。

在codeigniter中,您应该始终尝试使用site_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以查看内置会话类和输入类。