Интеграция Facebook в сайт PHP - PullRequest
2 голосов
/ 15 октября 2011

Я пытаюсь интегрировать свой существующий php-сайт с функциями входа в Facebook.В настоящее время у меня есть простой логин, имя пользователя, пароль и адрес электронной почты для активации, а их данные хранятся в базе данных MYSQL.Я хочу добавить дополнительный доступ для входа в систему для пользователей Facebook.Я беспокоюсь о том, как я смогу интегрировать свой текущий вход в систему с новым доступом на Facebook.Главное, на мой взгляд, это то, что все мои страницы требуют, чтобы пользователи входили в систему, и я использую куки для хранения переменных сеанса, таких как никнейм, который я использую для создания контента на моих страницах.

Меня смущают многие подходы, которые я исследовал в Интернете, некоторые из них сейчас, к сожалению, устарели, а другие кажутся наполовину решениями.Эти три повторяются.

A) Login.php, Register.php и fbReg.php Login.php и register.php появляются при входе в систему с использованием fb login / register для создания сеанса и прохождения аутентификации.на fbReg.php, но он просто останавливается там с пустым экраном после перенаправления страницы.

(фрагмент из Register.php)

<script type="text/javascript">
FB.init({appId: '<?php echo $fb_app_id; ?>', status: true,
    cookie: true, xfbml: true});

<?php
    if ($errors == 0) {
    ?>
    $('#form_hidden').hide();
<?php } else { ?>
    checkInput('username');
    checkInput('email');
    checkInput('lastname');
    checkInput('firstname');
    checkInput('password');
    checkInput('password2');
<?php } ?>
</script>

B) Legacy Connect Auth http://developers.facebook.com/docs/authentication/connect_auth/ Используя приведенную выше ссылку, я создал несколько тестовых сценариев, чтобы посмотреть, сработает ли аутентификация.К счастью, на моем сайте есть сторонние рекламные объявления или веб-фреймы, но я следовал инструкциям по созданию письма interstitial_page и перенаправленной страницы с моей главной страницы входа.Однако я продолжаю получать нулевой сеанс.

(фрагмент со страницы входа в систему php)

$api_key = "YOUR_API_KEY";
$interstitial_page = "YOUR_SECURE_URL"; //URL with no 3rd party apps

$url='http://www.facebook.com/login.php?api_key=' . $api_key  
. '&session_version=3&next=' . urlencode($interstitial_page)
. '&v=1.0&return_session=1&fbconnect=1'
. '&cancel_url=' . urlencode($interstitial_page);

echo "Welcome to the Old Auth flow";
echo "<p>";

echo("<a href='" . $url . "'>"
. "<img src='http://static.ak.facebook.com/images/"
. "devsite/facebook_login.gif'></a>");

C) Протокол OAuth 2.0 http://developers.facebook.com/docs/authentication/, когда я снова использую это с использованием следующегоскрипт:

 https://www.facebook.com/dialog/oauth?
 client_id=YOUR_APP_ID&redirect_uri=YOUR_URL

Я пытался и не смог использовать это, чтобы получить информацию о пользователе для моих новых пользователей сайта Facebook и сохранить ее в базе данных MySQL, а затем интегрировать этот аутентифицированный доступ к Facebook с сеансом пользователя с «обычным» веб-доступом.так как это связано с переменными сеанса, которые используются в пользовательском опыте.

Любая помощь будет оценена, сейчас я изо всех сил.

Спасибо, Майкл

я получаю пробелэкран на fbReg.php

Ответы [ 2 ]

3 голосов
/ 15 октября 2011

Я только что сделал это для своего сайта на прошлой неделе, поэтому я знаю, как трудно разобраться во всех многочисленных методах, многие из которых устарели.Это был мой подход:

  1. Я разместил на своем сайте ссылку «Войти через Facebook», которая перенаправляет на мою обычную страницу регистрации.

    <a href="http://www.facebook.com/dialog/oauth?client_id=<? echo $FACEBOOK_APP_ID ?>&redirect_uri=http://www.yoursite.com/register.php&scope=email">Log in with Facebook</a>
    
  2. Мой сценарий регистрации выглядит следующим образом:

    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
    <head></head>
    <body>
    <div id="fb-root"></div>
    <script src="http://connect.facebook.net/en_US/all.js"></script>
    <script>
    FB.init({appId: '<? echo $FACEBOOK_APP_ID ?>', status: true, cookie: true, xfbml: true});
    FB.Event.subscribe('auth.login', function(response) { window.location.reload(); });
    </script>
    
    function get_facebook_cookie($app_id, $app_secret) 
    {
        $args = array();
        parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args);
    
        ksort($args);
        $payload = '';
        foreach ($args as $key => $value) {
        if ($key != 'sig') {
        $payload .= $key . '=' . $value;
        }
        }
        if (md5($payload . $app_secret) != $args['sig']) {
        return null;
        }
        return $args;
    }
    
    $cookie = get_facebook_cookie($FACEBOOK_APP_ID, $FACEBOOK_SECRET);
    if($cookie)
    { 
        $access_token = $cookie['access_token'];
    
    }
    $url = 'https://graph.facebook.com/me?access_token='.$access_token;
    $graph = file_get_contents($url);
    if($graph) 
    {
    
        $fbuser = json_decode($graph);
        $userid = $fbuser->id;
        $email = mysql_real_escape_string($fbuser->email);
    
        /********************** 
        I placed code here to check if the  email already exists in my database, which means they are already a member. 
        In that case, I retrieve their username and password from the database and automatically log them 
        in by rerouting them to my login script with their crenditials sent as well.
        ***********************/
    
        /********************** 
        If the email is not already in my database, then I know it's a new user and so I prompt them to make a username here. 
        ***********************/
    }
    //The user either opted to log in using my traditional non-Facebook method, or something went wrong with the FB authentication
    else 
    {
    
        /********************** 
        Show my normal registration form that prompts for username, email, etc 
        ***********************/
    }
    
  3. В своем сценарии входа в систему я устанавливаю имя пользователя и т. Д. Файлы cookie как обычно.

Надеюсь, это поможет!

0 голосов
/ 15 октября 2011

Я не могу сказать, говорите ли вы о социальных плагинах, но если это так, у этих плагинов Facebook есть встроенные генераторы, которые генерируют необходимый вам код.

Если вы ищете не плагины, а информацию для пользователей, я все же рекомендую запустить генераторы, чтобы получить код и посмотреть, как Facebook получает информацию для пользователей.

Следуя пути простых сценариев, вы попадете туда, куда вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...