I'm using Facebook's JavaScript SDK to bring up a Login Popup when the user clicks the Login button.
The code is, as Facebook provides in the 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.
});
});
I can also use FB.getLoginStatus()
to check that the user has indeed logged in and accepted the application.
However, now I would like to execute a function with PHP. As far as I understand, PHP has $user
which is assigned the UserID after a successful login.
The problem is after the JS Login $user
is still 0
. I'm stuck and I can't figure out why it won't assign the correct user ID to $user
Here's my 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>
And here's the 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;
}
?>
Updated mobile browser experience. Tap in the top right of Facebook, then tap your name. Tap below your profile picture, then tap Activity Log.
JavScript Code: FB. getLoginStatus() – Check whether the user already logged in. fbLogin() – Open a login dialog to login with Facebook account credentials. getFbUserData() – Fetch the user's account data from Facebook and display profile info and login status to the user.
Login with the JS SDK stores the login data in the Facebook cookies while login with the PHP SDK stores the data in the PHP session. So if you log with the JS SDK, the PHP SDK will not be aware of that.
To login with the PHP SDK using the JS SDK data, you need to call your PHP page with the signed request in the query parameter:
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;
}
});
Then $facebook->getUser()
will give you the user id in your PHP code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With