我已经成功地通过我的CodeIngiter应用程序访问了LinkedIn应用程序接口。我移动到几乎相同的服务器上并实现了i18n库,但它停止了工作。
用户在LinkedIn上进行身份验证后,它会返回到正确的URL,但会生成一系列以Undefined index: oauth_verifier开头的错误
使用i18n library后,我的URL在第一部分有两个字母语言代码,如'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']);
}发布于 2012-05-08 06:39:33
根据你的评论和帖子,我猜你正试图连续两次使用相同的方法,这样你就可以登录了。看起来很奇怪,但不管怎样。
然而,您使用的i18n将更改您的路由以包含语言,因此您应该更新您在to控制器中设置的url,以也使用该语言或一种语言。
在codeigniter中,您应该始终尝试使用site_url()来设置url。通过这种方式,您可以轻松地将您的应用程序移植到其他域名/位置。在这种情况下,本地化库也会为您更改url。
您应该更改对urls的所有引用,如下所示:
$config['base_url'] = site_url("linklogin/initiate/");
$config['callback_url'] = site_url("linklogin/get_resume_linkedin/");要使用site_url(),您需要URL Helper。在尝试使用site_url()之前,您应该包含该帮助程序。但是你已经把它包含在你的构造函数中了,所以没有问题。
您还应该用redirect();替换header(...); exit;的使用。如果您在发送头部后死亡,codeigniter将不会完全运行,并且您的日志将不会完全完成。
redirect($config['callback_url']); // Replaces: header($config['callback_url']);exit;
redirect('linklogin/get_resume_linkedin/'); // Alternative to above statement我还建议您查看manual,以查看内置会话类和输入类。
https://stackoverflow.com/questions/10487027
复制相似问题