Awesome
PHP-Rocker - Facebook login
Install this package in your Rocker application and you will have a restful API that can authenticate users that has logged in using their facebook identities.
This installation walk through takes for granted that you have some prior knowledge about composer
1) Install PHP-Rocker
Here you can read more about how to get started with PHP-Rocker
2) Add the facebook login package
Add "rocker/facebook-login" : "1.*"
to the application requirements in composer.json and run composer update
in
the console.
3) Edit config.php
In the file config.php you add your facebook application data and change the authentication class to Rocker\FacebookLogin\Authenticator. You will also have to add the facebook connect operation.
return array(
...
'application.operations' => array(
...
'facebook/connect' => '\\Rocker\\FacebookLogin\\Connect'
),
'application.auth' => array(
'class' => '\\Rocker\\FacebookLogin\\Authenticator',
'mechanism' => 'facebook realm="your.website.com"'
),
...
'facebook' => array(
'id' => 'Facebook app id',
'secret' => 'Facebook app secret',
# (Optional) Comma separated string with data fields in the facebook response that
# should saved as user meta when the user gets connected
'connect_data' => 'birthday,locale',
# (Optional) Comma separated string with authentication mechanisms that should be disabled
'disabled_auth_mechanisms' => 'rc4,basic',
)
);
4) Implementation
The following example uses rocker.js together with Facebook javascript SDK
<html>
<head></head>
<body>
<button id="login-button">Login with FB</button>
<script src="/scripts/rocker.js"></script>
<script src="//connect.facebook.net/en_US/all.js"></script>
<script>
// Initiate FB
FB.init({
appId : FB_APP_ID,
status : true,
cookie : false,
oauth : false
});
// Instantiate the Rocker server
var rocker = new Rocker('https://api.mywebsite.com/');
var onFacebookLogin = function() {
// Connect user
rocker.request({
path : 'facebook/connect?access_token='+FB.getAccessToken(),
method : 'POST',
onComplete : function(status, json, http) {
// set facebook auth data
rocker.auth = 'facebook '+FB.getAuthResponse().userID+':'+FB.getAccessToken();
// From here on you can access any operation that requires authentication
rocker.me(function(rockerUser) {
console.log(rockerUser);
});
}
});
};
// When user clicks on login button
document.getElementById('login-button').onclick = function() {
// Check login status
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
onFacebookLogin();
} else {
// Login
FB.login(function(response) {
if(response.status == 'connected') {
onFacebookLogin();
}
}, {scope: 'email,user_birthday,user_location'});
}
});
};
</script>
</body>
</html>