Аутентификация на Facebook - новый участник и существующий член? - PullRequest
1 голос
/ 05 ноября 2011

Я только что реализовал аутентификацию Facebook на своем веб-сайте с использованием JavaScript Facebook.

Если пользователь впервые зашел на Facebook с моего сайта, а затем ему нужно вставить данные в таблицу users (mysql) - может быть, поле с именем fb_userid и электронная почта?

Я прочитал Документацию по JavaScript SDK, в которой я могу получить идентификатор пользователя Facebook, но как мне передать его в PHP, чтобы я мог вставить в users таблицу?

Facebook Javascript выглядит так:

    <script>
        window.fbAsyncInit = function() {
            FB.init({
                appId      : 'xxxxxxxx', // App ID
                status     : true, // check login status
                cookie     : true, // enable cookies to allow the server to access the session
                oauth      : true, // enable OAuth 2.0
                xfbml      : true  // parse XFBML
            });

        (function(d){
            var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
            js = d.createElement('script'); js.id = id; js.async = true;
            js.src = "//connect.facebook.net/en_US/all.js";
            d.getElementsByTagName('head')[0].appendChild(js);
        }(document));

На странице входа в систему:

  <fb:login-button scope="email" autologoutlink="true"></fb:login-button>

Можно ли использовать PHP SDK для получения идентификатора пользователя Facebook?

Необходимо ли загружать файл JavaScript Facebook перед использованием PHP SDK?

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

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

<?php
    require 'facebook.php'; // USE FACEBOOK PHP SDK

    // Create our Application instance (replace this with your appId and secret).
    $facebook = new Facebook(array(
      'appId'  => 'APPID',
      'secret' => 'APPSECRET',
    ));
    // ----------------------------------------------------------------------------------------
    // ----------------------------------------------------------------------------------------

    // Get User ID
    $user = $facebook->getUser();

    /* We may or may not have this data based on whether the user is logged in.
       If we have a $user id here, it means we know the user is logged into
       Facebook, but we don't know if the access token is valid. An access
       token is invalid if the user logged out of Facebook. */

    if ($user) {
      try {
        // Proceed knowing you have a logged in user who's authenticated.
        $dt = $facebook->api('/me');
        $lk = $facebook->api('/me/likes');
      } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
      }
    }

    // ----------------------------------------------------------------------------------------
    // ----------------------------------------------------------------------------------------
    // Handler for Login Status
    if ($user) {
      $logoutUrl = $facebook->getLogoutUrl();
    } else {
      $loginUrl = $facebook->getLoginUrl(array("scope" => "email,user_birthday,user_likes,user_work_history,user_location,user_education_history"));
    }
    // ----------------------------------------------------------------------------------------
    ?>
    <?php if (!$user): header ('Location:'.$loginUrl.''); //CHECKS IF USER IS LOGGED IN
    else: 
    $con = mysql_connect("DATABASE IP","USERNAME","PASS");
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }
    else{
    $id = base64_encode(serialize($dt['id']));
    $work = base64_encode(serialize($dt['work']));  
    $location = base64_encode(serialize($dt['location']));  
    $education = base64_encode(serialize($dt['education']));    
    $f_n = $dt['first_name'];
    $l_n = $dt['last_name'];
    $link = $dt['link'];
    $u_n = $dt['username'];
    $bd = $dt['birthday'];
    $gdr = $dt['gender'];
    $em = $dt['email'];
    $sportsS = base64_encode(serialize($dt['sports']));
    $languagedt = $dt['languages'];
    foreach($languagedt as $item){
        $language[] = $item;
    }
    $languageS = base64_encode(serialize($language));

    $lk_dt = $lk['data'];
    foreach($lk_dt as $value)
      {
      if ($value['category'] == "Musician/band" || $value['category'] == "Song" ){
        $fav_music[] = $value;
      } 

      if($value['category'] == "Tv show"){
        $fav_tvshow[] = $value;
      }

      if($value['category'] == "Book"){
        $fav_book[] = $value;   
      }

      if($value['category'] == "Movie"){
        $fav_movie[] = $value;  
      }

      if($value['category'] == "Games/toys"){
        $fav_games[] = $value;  
      }

      if($value['category'] == "Interest"){
        $interest[] = $value;   

      }

      if($value['category'] == "Professional sports team"){
        $sport_team[] = $value; 

      }

      // next is likes
      if ($value['category'] != "Movie" && $value['category'] != "Musician/band" && $value['category'] != "Book" && $value['category'] != "Games/toys" && $value['category'] != "Tv show" && $value['category'] != "Professional sports team" && $value['category'] != "Interest" && $value['category'] != "Tv show" && $value['category'] != "Professional sports team" && $value['category'] != "Song") {
        $likes[] = $value;
      } 
    }
    $fav_musicS = base64_encode(serialize($fav_music));
    $fav_movieS = base64_encode(serialize($fav_movie));
    $fav_bookS = base64_encode(serialize($fav_book));
    $fav_tvshowS = base64_encode(serialize($fav_tvshow));
    $sport_teamS = base64_encode(serialize($sport_team));
    $fav_gamesS = base64_encode(serialize($fav_games));
    $interestS = base64_encode(serialize($interest));
    $likesS = base64_encode(serialize($likes));

    mysql_select_db("database", $con);

    $result = mysql_query("SELECT id, firstdone FROM users WHERE id='$id'");
    $row = mysql_fetch_array($result);
    $f_dn = $row['firstdone'];
    $ctrl = $row['id'];
    if (!$ctrl){

    mysql_query("INSERT INTO users (id, language, fav_sports, education, location, work, first_name, last_name, link, username, birthday, gender, email, fav_music, fav_movie, fav_books, fav_tv, fav_sport, fav_games, interest, likes)
    VALUES ('$id', '$languageS', '$sportsS', '$education', '$location', '$work', '$f_n', '$l_n', '$link', '$u_n', '$bd', '$gdr', '$em', '$fav_musicS', '$fav_movieS', '$fav_bookS', '$fav_tvshowS', '$sport_teamS', '$fav_gamesS', '$interestS', '$likesS')");      

    if ($_SERVER['REQUEST_URI'] == '/index.php') {
        header('Location: /theprofilepage');}
    }
    else{
    mysql_query("UPDATE users SET language='$languageS', fav_sports='$sportsS', first_name='$f_n', last_name='$l_n', link='$link', username='$u_n', birthday='$bd', gender='$gdr', email='$em', fav_music='$fav_musicS', fav_movie='$fav_movieS', fav_books='$fav_bookS', fav_tv='$fav_tvshowS', fav_sport='$sport_teamS', fav_games='$fav_gamesS', interest='$interestS', likes='$likesS', work='$work', location='$location', education='$education' WHERE id='$id'");

    }
    mysql_close($con);

    }endif
    ?>

Вы можете получить нужные значения с помощью JavaScript, затем передать их в качестве значений в заголовке с помощью функции location, затем php получит эту информацию с помощью $ _GET, поэтому я рекомендую использовать PHP SDK для выполнения аутентичные вещи. Но вы выбираете. И вы также можете использовать их вместе.

0 голосов
/ 05 ноября 2011

Мне кажется, что лучше всего было бы использовать Javascript (в моем примере также jQuery) для вызова страницы PHP в фоновом режиме, которая добавляет пользователей в базу данных.

Заголовок страницы:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript">
function (data)
{
      file = 'adddata.php?data=' + data;
      $.get(file, function(content)
      {
          if (content == 'OK')
          {
              alert('Data added to the database!');
          }
          else
          {
              alert('Error adding data to the database!');
          }
      });
}
</script>

Пример adddata.php :

<?php
$dblink = mysqli_connect(mysql_data_here);
$query = 'INSERT INTO users VALUES (' . $_GET['data'] . ');';
$ok = $mysqli_query($query);
if ($ok == true)
{
    echo 'OK';
}
else
{
    echo 'Failed';
}
?>

Конечно, вам нужно будет экранировать входящие данные в сценарии PHP и немного изменить запрос SQL,но это общая идея.

...