Codeigniter 使用PHP和JS facebook SDK实现Oauth
各位发展商, 我正在使用codeigniter(电子商务类平台)实现facebook登录到我的Web应用程序 所以,我在我的网站上有很多过滤器,基于它们,我试图获取数据并请求服务。所以用户必须登录才能请求服务,所以最后我强迫用户继续登录(比如买东西) 问题来了,我使用Javascript SDK实现了Facebook登录,并尝试获取accesstoken。并在codeigniter中创建了一个FACEBOOK库,该库使用。现在,我应该在所有会话中更新用户详细信息,并将用户名动态附加到codeigniter中的当前视图 您可以在下面查看我迄今为止的尝试: Facebook Libabry:Codeigniter 使用PHP和JS facebook SDK实现Oauth,codeigniter,oauth,facebook-javascript-sdk,facebook-php-sdk,Codeigniter,Oauth,Facebook Javascript Sdk,Facebook Php Sdk,各位发展商, 我正在使用codeigniter(电子商务类平台)实现facebook登录到我的Web应用程序 所以,我在我的网站上有很多过滤器,基于它们,我试图获取数据并请求服务。所以用户必须登录才能请求服务,所以最后我强迫用户继续登录(比如买东西) 问题来了,我使用Javascript SDK实现了Facebook登录,并尝试获取accesstoken。并在codeigniter中创建了一个FACEBOOK库,该库使用。现在,我应该在所有会话中更新用户详细信息,并将用户名动态附加到codeig
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
if ( session_status() == PHP_SESSION_NONE ) {
session_start();
}
// Autoload the required files
require_once( APPPATH . 'libraries/facebook/autoload.php' );
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\FacebookJavaScriptLoginHelper;
use Facebook\GraphObject;
use Facebook\GraphUser;
class Facebook {
var $ci;
var $helper;
var $session;
var $permissions;
public function __construct() {
$this->ci =& get_instance();
$this->permissions = $this->ci->config->item('permissions', 'facebook');
// Initialize the SDK
FacebookSession::setDefaultApplication( $this->ci->config->item('api_id', 'facebook'), $this->ci->config->item('app_secret', 'facebook') );
$this->helper = new FacebookJavaScriptLoginHelper();
// No session exists
try {
$this->session = $this->helper->getSession();
} catch( FacebookRequestException $ex ) {
} catch( Exception $ex ) {
// When validation fails or other local issues
}
}
/**
* Returns the login URL.
*/
public function login_url() {
return $this->helper->getLoginUrl( $this->permissions );
}
/**
* Returns the current user's info as an array.
*/
public function get_user() {
if ( $this->session) {
$request = ( new FacebookRequest( $this->session, 'GET', '/me' ) )->execute();
// Get response as an array
$user = $request->getGraphObject()->asArray();
return $user;
}
return false;
}
public function logout(){
session_start();
session_destroy();
}
}
我的标题视图:
<?php if($this->session->userdata('user_name')): ?>
<li id="userName" class="dropdown">
<a href="#" id="userNameAnchor" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Welcome <span class="user_name"><?php echo $this->session->userdata('user_name')?></span><span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">Account settings</a></li>
<li><a href="<?php echo base_url('redirectoauth/FbLogout')?>">Logout</a></li>
</ul>
</li>
<?php else: ?>
<li id="login"><a href="#socialLogin" data-toggle="modal">Login</a></li>
<?php endif; ?>
Ajax调用
$.ajax({
url:"<?php echo base_url('redirectoauth');?>",
success:function(data){
var data=$.parseJSON(data);
$('.user_name').html(data.name);
$('#userName').css('display','block')
$('#login').css('display','none');
$('#socialLogin').modal('hide');
}
});
$.ajax({
url:“”,
成功:函数(数据){
var data=$.parseJSON(数据);
$('.user_name').html(data.name);
$('#userName').css('display','block'))
$('#login').css('display','none');
$('#socialwin').modal('hide');
}
});
任何关于解决此问题的体系结构的参考或建议。这将解决您的问题 ajax调用
$.ajax({
url:"<?php echo base_url('redirectoauth');?>",
success:function(data){
var data=$.parseJSON(data);
$('.user_name').html(data.name);
$('#logined').css('display','block')
$('#sociallogined').css('display','none');
$('#socialLogin').modal('hide');
}
});
$.ajax({
url:“”,
成功:函数(数据){
var data=$.parseJSON(数据);
$('.user_name').html(data.name);
$(“#登录”).css('显示','块')
$('#sociallinked').css('display','none');
$('#socialwin').modal('hide');
}
});
看法
>
您无法将我们网站的所有会话设置为facebook登录吗?@user1048123无法获取您实际获得的问题?你不能在facebook登录后设置会话吗?你知道我正在从facebook库向控制器获取数据,但我无法在当前视图中更新它。我可以开始上课了。因为我使用的是JS SDK,所以这里的视图没有重定向。好的,所以您可以使用ajax在控制器中设置会话并向视图发送响应,对吗?但在视图中,您无法在响应后看到会话更改,对吗?这解决了您的问题吗?
$.ajax({
url:"<?php echo base_url('redirectoauth');?>",
success:function(data){
var data=$.parseJSON(data);
$('.user_name').html(data.name);
$('#logined').css('display','block')
$('#sociallogined').css('display','none');
$('#socialLogin').modal('hide');
}
});
<ul id="logined" <?php echo $this->session->userdata('user_name') ? 'style="display:none"' :''; ?>>
<li id="userName" class="dropdown">
<a href="#" id="userNameAnchor" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Welcome <span class="user_name"><?php echo $this->session->userdata('user_name')?></span><span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">Account settings</a></li>
<li><a href="<?php echo base_url('redirectoauth/FbLogout')?>">Logout</a></li>
</ul>
</li>
</ul>
<ul id="sociallogined">
<li id="login"><a href="#socialLogin" data-toggle="modal">Login</a></li>
</ul>