use*_*254 8 javascript php facebook facebook-graph-api facebook-login
当用户单击"登录"按钮时,我正在使用Facebook的JavaScript SDK来显示"登录弹出窗口".
代码是,正如Facebook在doucmentation中提供的:
$(".loginButton").click(function(){
FB.login(function(response) {
FB.api('/me', function(response) {
console.log(response.id);
//User ID shows up so I can see that the user has accepted the app.
});
});
Run Code Online (Sandbox Code Playgroud)
我还可以FB.getLoginStatus()用来检查用户是否确实已登录并接受了该应用程序.
但是,现在我想用PHP执行一个函数.据我所知,PHP已$user成功登录后分配了UserID.
问题是JS登录后$user仍然存在0.我卡住了,我无法弄清楚为什么它不会分配正确的用户ID$user
这是我的JS:
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({
appId : '<?php echo $AppId; ?>',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true,
channelUrl : '<?php echo $ServerPath; ?>channel.php' // custom channel
});
};
//Get Login Status
function amILoggedIn(){
var toreturn = "";
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
window.userId = response.authResponse.userID;
toreturn = "GetLoginStatus: logged in" + " " + "<?php echo $user; ?>";
} else {
toreturn = "GetLoginStatus: Logged Out";
}
console.log(toreturn);
});
};
// Load the SDK asynchronously
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
var obj = {
method: 'feed',
link: 'http://www.google.com'
};
$(".loginPopupButton").click(function(){
FB.login(function(response) {
FB.api('/me', function(response) { //user-specific stuff
console.log(response.id);
});
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
这是PHP:
<?php
include_once('fbapi/facebook.php');
include_once('fbapi/Authenticated_User.php');
include_once('config.php');
// Create our Application instance.
$facebook = new Facebook(array(
'appId' => $AppId,
'secret' => $AppSecret
));
//Facebook Authentication part
$user = $facebook->getUser();
$perms = "manage_pages";
if(isset($_GET['backlink']))
$redirectUrl = urldecode($_GET['backlink']);
else
$redirectUrl = $fullserverpath;
$cancelUrl = $ServerPath."index.php?page=loginWFb";
//AA - where to go to get FB popup.
$loginUrl = $facebook->getLoginUrl(
array(
'scope' => $perms,
'redirect_uri' => $redirectUrl,
'cancel_uri' => $cancelUrl
)
);
//AA- Defining that a powerUSER is someone who's logged in
if(isset($user)){
$_SESSION['loggedIn'] = $user;
}
?>
Run Code Online (Sandbox Code Playgroud)
使用 JS SDK 登录将登录数据存储在 Facebook cookie 中,而使用 PHP SDK 登录将数据存储在 PHP 会话中。因此,如果您使用 JS SDK 登录,PHP SDK 将不会意识到这一点。
要使用 JS SDK 数据登录 PHP SDK,您需要在查询参数中使用签名请求来调用 PHP 页面:
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
// Full redirect or ajax request according to your needs
window.location.href = 'login.php?signed_request='+response.authResponse.signedRequest;
}
});
Run Code Online (Sandbox Code Playgroud)
然后$facebook->getUser()将在 PHP 代码中为您提供用户 ID。
| 归档时间: |
|
| 查看次数: |
12208 次 |
| 最近记录: |