#php #html #facebook #login #sdk
#php #HTML #Facebook #аутентификация #sdk
Вопрос:
Я хочу добавить кнопку входа с помощью Facebook на свою веб-страницу. Я успешно вошел в систему с SDK v4.0.
Но я вошел только на той же странице. ($helper = новый FacebookRedirectLoginHelper(SAME_PAGE))
Вот мой код (loginFB.php ). Это работает нормально, но мой вопрос: как я могу включить этот PHP на другую страницу (defaultLogin.php ). Я не вижу там форму переменной $session, она входит в систему (потому что она возвращается к моему defaultLogin.php с помощью ?code=FACEBOOK_AUTH_CODE), но я не могу видеть сеанс.
Кто-нибудь может помочь?
Спасибо!
loginFB.php
<?php
session_start();
if(isset($_GET['action']) amp;amp; $_GET['action'] === 'logout'){
$session->destroySession();
unset($_SESSION['token']);
unset($session);
}
require_once( 'Facebook/FacebookSession.php' );
require_once( 'Facebook/FacebookRedirectLoginHelper.php' );
require_once( 'Facebook/FacebookRequest.php' );
require_once( 'Facebook/FacebookResponse.php' );
require_once( 'Facebook/FacebookSDKException.php' );
require_once( 'Facebook/FacebookRequestException.php' );
require_once( 'Facebook/FacebookAuthorizationException.php' );
require_once( 'Facebook/GraphObject.php' );
require_once( 'Facebook/GraphUser.php' );
require_once( 'Facebook/GraphSessionInfo.php' );
require_once( 'config/fbconfig.php' );
use FacebookFacebookSession;
use FacebookFacebookRedirectLoginHelper;
use FacebookFacebookRequest;
use FacebookFacebookResponse;
use FacebookFacebookSDKException;
use FacebookFacebookRequestException;
use FacebookFacebookAuthorizationException;
use FacebookGraphObject;
use FacebookGraphUser;
use FacebookGraphSessionInfo;
// init app with app id (APPID) and secret (SECRET)
FacebookSession::setDefaultApplication(APP_ID,APP_SECRET);
// login helper with redirect_uri
$helper = new FacebookRedirectLoginHelper( 'http://myWeb/defaultLogin.php' );
try{
$session = $helper->getSessionFromRedirect();
}catch(Exception $e){
//echo "Facebook error: ". $e->getMessage();
}
if(isset($session)){
$_SESSION['token'] = $session->getToken();
echo "Login Successful<br>";
$request = new FacebookRequest($session, 'GET', '/me');
$response = $request->execute();
$graph = $response->getGraphObject(GraphUser::className());
$graph2 = $response->getGraphObject()->asArray();
echo "Id: " . $graph->getId() . "<br>";
echo "Hi " . $graph->getName() . "<br>";
echo "Email: " . $graph2['email'] . "<br>";
// print profile data
echo '<pre>' . print_r( $graph2, 1 ) . '</pre>';
echo "<img src='http://graph.facebook.com/".$graph->getId()."/picture?type=large' border=0>";
echo "<script> checkUser('".$graph->getId()."','".$session->getToken()."','".$graph2['email']."'); </script>";
echo '<a href="?action=logout">Logout</a>';
}
else{
echo "<a href = " . $helper->getLoginUrl(array( 'email', 'user_friends' )) . ">Login con Facebook v1</a>";
}
if(isset($_SESSION['token'])){
$session = new FacebookSession($_SESSION['token']);
try{
$session->Validate(APP_ID, APP_SECRET);
}catch(FacebookAuthorizationException $e){
$session = '';
}
}
?>
defaultLogin.php
<!DOCTYPE html>
<?php session_start(); ?>
<html prefix="og: http://ogp.me/ns#" lang="es" conduit_compatibility_version="1" style="margin-top: 0px; position: relative !important;"><!--<![endif]--><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<?php include 'head.php';?>
(...)
<?php include 'header.php';?>
<?php include 'navLogin.php';?> (...)
navLogin.php
<?php include_once('loginFb.php')?>
<!-- Navigator BAR -->
<nav class="navbar navbar-inverse navbar-static-top" role="navigation">
<div class="container"> (...)
Ответ №1:
в вашем коде не хватает нескольких классов. вам нужно добавить следующие классы в свой код перед использованием строки FacebookFacebookSession;
, и он должен работать.
require_once( 'Facebook/HttpClients/FacebookHttpable.php' );
require_once( 'Facebook/HttpClients/FacebookCurl.php' );
require_once( 'Facebook/HttpClients/FacebookCurlHttpClient.php' );
require_once( 'Facebook/Entities/AccessToken.php' );
require_once( 'Facebook/Entities/SignedRequest.php' );