Facebook Login API pozwala użytkownikom zarejestrować się lub zalogować do swojej aplikacji za pomocą swojej tożsamości na Facebooku.
Facebook Login wykorzystuje OAuth 2.0 do obsługi uwierzytelniania i autoryzacji. Twoja aplikacja może poprosić o dostęp do danych użytkownika za pośrednictwem różnych zakresów autoryzacji udostępnianych przez interfejs API.
Zanim zaczniesz wdrażać API przy użyciu zestawu SDK JavaScript, potrzebujesz identyfikatora aplikacji Facebook, który możesz utworzyć i pobrać w panelu aplikacji. Następnie umieszczamy go w kodzie zamiast 'YOUR APP ID' oraz jego wersje 'YOUR API VERSION' .
...
FB.init({
appId : 'YOUR APP ID',
cookie : true,
xfbml : true,
version : 'YOUR API VERSION'
});
...
Dzięki czemu mamy możliwość autoryzacji użytkowników przez protokół OAuth.
Funkcjonalności:
autoryzacja użytkownika z Facbook'a
pobiera informacje o użytkowniku z Facebook'a
Załącznik zawiera przykład użycia, bibliotekę i instrukcję implementacji w folderze instalacyjnym.
Prosty przykład wykorzystania Facebook Login API.
// Spprawdzenie statusu połączenia użytkownika z Facebookiem.
// Jeśli użytkownik jest połączony, nasepuje przekazanie accessTokena uwieżytelniającego użytkownika.
function statusChangeCallback(response) {
if (response.status === 'connected') {
jq.ajax({
type: "POST",
url: '$page.url("api.facebook.ApiFbController","&requestHandler=loggingInFacebook")',
data: "&accessToken="+response.authResponse.accessToken,
dataType: "json",
success: function(resp){
if(resp.data.res==1){
alert('Jesteś użytkownikiem już zarejestrowanym.');
window.location.href=resp.data.link
}else if (resp.data.res==0){
alert('Jesteś nowym użytkownikiem.');
window.location.href=resp.data.link
}else{
alert('Email jest wymagany.');
}
},
error: function(error){
alert("jq.ajax ERROR");
}
});
}
}
// Funkcja sprawdzająca czy po naciśnięciu przycisku zaloguj nasstąpiło pomyślen połączenie z facebookiem.
function checkLoginState() {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
}
// Konfiguracja połączenia do Facebook SDK.
// AppID i wersje otrzymujemy przy tworzeniu konta na stronie deweloperskiej Facebooka.
// AppID jest wymagane i indywidualne dla każdej aplikacji, która posiada logowanie przez Facebooka.
window.fbAsyncInit = function() {
FB.init({
appId : 'YOUR APP ID',
cookie : true,
xfbml : true,
version : 'YOUR API VERSION'
});
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
};
// Załadowanie SDK Facebooka.
(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 = "https://connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
// Zmiana funkcji oclick: jeśli użytkownik jest zalogowany to przycisk zaloguj zostanie zastąpiony linkiem wyloguj.
function getFbUserData(){
document.getElementById('fbLink').setAttribute("onclick","fbLogout()");
document.getElementById('fbLink').innerHTML = 'Logout from Facebook';
}
// Zmiana funkcji oclick: jeśli użytkownik został wylogowany to link wyloguj zostaje zastąpiony przyciskiem zaloguj.
function fbLogout() {
FB.logout(function() {
document.getElementById('fbLink').setAttribute("onclick","fbLogin()");
});
}
package api.facebook;
import palio.*;
import palio.modules.*;
import jpalio.mvc.*;
import jpalio.mvc.annotations.*;
import api.facebook.dao.*;
import universal.model.*;
import palio.pelements.PUser;
import palio.pelements.PSession;
import api.facebook.restFb.UserProfile;
import api.facebook.restFb.GetUserDetails;
public class ApiFbController extends Controller {
private static final User user = Groovy.module("user")
private static final Page page = Groovy.module("page")
// Funkcja logowania do Facbooka
@RequestHandler(view=["portal.view.accounting.mvc.view.jsonResponse"])
public Object[] loggingInFacebook (@RequestParam(name="accessToken") String accessToken){
// Tworzy profil logowanego uzytkownika.
GetUserDetails objGetUserDetails = new GetUserDetails();
// Tworzy obiekt i na podstwie access token pobiera dane uzytkownika do obiektu.
UserProfile objUserProfile = objGetUserDetails.getProfileInfo(accessToken);
// Pobiera email wczesniej utworzonego uzytkowniak do kolejnych instrukcji.
String email = objUserProfile.getEmail();
Map mapa = [:] as Map;
try{
// Sprawdza czy uzytkownik wyrazil zgode na udostepnienie emaila. Jezeli nie to zwraca odp "3".
if(email){
// Sprawdza czy uzytkownik jest juz zarejestrowany. Jezeli tak to pobiera jego dane (odp "1") lub importuje go do BD (odp "0").
if(ApiFbDao.checkingIfUserExists(email)){
ApiFbDao.getUserDataFromDB(email);
mapa["res"] = 1;
}else {
ApiFbDao.setFbDataToBase (objUserProfile.getFirstName(),objUserProfile.getLastName(), objUserProfile.getEmail());
mapa["res"] = 0;
}
}else{
mapa["res"] = 3;
}
// Tworzy nową sesje i zwraca jej sessionId.
Long sessionId = creatingNewSesion(email)
// Przekazanie url do skryptu przez Json i przekierowanie strony przez parametr "pageCode".
// Paramtr "pageCode" ustawiany w pliku konfiguracyjnym ("api.facebook.config.Configuration").
mapa['link'] = page.url(api.facebook.config.Configuration.getParam("pageCode"))
return [new JsonResponse(
correct : true,
info : 'Json : Pobrano dane',
data : mapa as Map
)] as Object[]
}catch(Exception e){
return [new JsonResponse(
correct : false,
info : e.getMessage()
)] as Object[]
}
}
private Long creatingNewSesion ( String login){
Long sessionId = user.createSession(login)
PSession session = Instance.getCurrent().getInstance().getSession(sessionId)
// Otwiera obiekt "sessionParams" przekazany przez parametr "setParamObject".
// Paramtr "setParamObject" ustawiany w pliku konfiguracyjnym ("api.facebook.config.Configuration").
Groovy.object(api.facebook.config.Configuration.getParam("setParamObject"),sessionId)
return sessionId
}
@RequestHandler(defaultHandler = true, view="api.facebook.ApiFbLogin")
public Object[] defaultHandler(){
return null
}
public void handleException(Exception ex){
palio.Groovy.object("portal.view.accounting.mvc.view.error", ex)
}
}