5

おはようございます。Facebook にログインした後、ようやく Facebook のユーザー名をデータベースに保存することができました。唯一の問題は、Facebook ログイン後にユーザーがリダイレクトされるページをリロードする必要があることです (最初は空のページしか表示されません)。すでにすべてのコードを投稿しているので、以前の質問を参照してください

更新: ページを初めて更新する必要があることに気付きました (ユーザー情報がまだデータベースに保存されていない場合は、ページがすばやく適切に読み込まれます。助けてください!;-)

UPDATE2: 新しいユーザーが追加された後、ページを (1 回だけ) 自動更新する方法はありますか? どうもありがとう!

更新 3: コードを投稿します....ページを更新したときにのみ機能します....何か考えはありますか?

        <?php

          mysql_connect('host', 'username', 'password');  
           mysql_select_db('table');  



require 'library/facebook.php';

    // Create our Application instance 
   $facebook = new Facebook(array(
    'appId'  => 'MYID',
   'secret' => 'MYSECRET',
  'cookie' => true));


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



   if ($user) {
     try {
   // Proceed knowing you have a logged in user who's authenticated.
   $user_profile = $facebook->api('/me');



   } catch (FacebookApiException $e) {
   error_log($e);
   $user = null;
   }
     }else{
   header('location: index.php');

    }
      $query = mysql_query("SELECT * FROM users WHERE oauth_provider = 'facebook' AND       oauth_uid = ". $user_profile['id']);  
      $result = mysql_fetch_array($query);  

    if(empty($result)){ 
      $query = mysql_query("INSERT INTO users (oauth_provider, oauth_uid, username)         VALUES ('facebook', {$user_profile['id']}, '{$user_profile['name']}')");  
       $query = msyql_query("SELECT * FROM users WHERE id = " . mysql_insert_id());  
      $result = mysql_fetch_array($query);  

       }  



    if ($user) {
     $paramsout = array('next'=>'http://www.mywebsite/test/logout.php');
     $logoutUrl = $facebook->getLogoutUrl($paramsout);
     }


     ?>

更新 4*****: 解決策が見つかりました。以下の私の答えを見ることができます。みんなに感謝します。

4

7 に答える 7

3

Facebookが次のURLまたはリダイレクトURLを使用してリダイレクトすると、APIが取得する投稿データが送信されますが、ページを手動でリダイレクトすると、Facebookの投稿データが取得されないため、コードelse condition header('location: index.php');が実行され、適切にリダイレクトされます..

初めての問題は、else条件を通過し、SQLに移動して新しいレコードを挿入し、その後はリダイレクトされないためです。したがってheader('location: index.php');、dbにユーザーレコードを挿入した後、最後にリダイレクトする必要があります

お役に立てれば

于 2012-05-16T07:02:51.657 に答える
2

使用する

header("Location: url");
exit();

この瞬間にヘッダーを送信しないと仮定して、必要なすべてのアクションの後。それ以外の場合は、結果のドキュメントで META REFRESH または JS document.location.href を使用できます。

于 2012-05-16T08:25:28.783 に答える
1

最後に私はそれを作った。もちろん、リダイレクトの問題でした。しかし、index.php にも user_page.php にも sql を追加しても機能しませんでした。ユーザーがFacebookページからリダイレクトされ、新しいレコードの場合はデータベースに追加され、次にuser_page.phpにリダイレクトされる「login.php」を作成しました。これは login.php のコードです:

<?php


 mysql_connect('HOST', 'USER', 'PSW');  
 mysql_select_db('MYDATABASE');

 require 'library/facebook.php';

  // Create our Application instance (replace this with your appId and secret).
   $facebook = new Facebook(array(
  'appId'  => 'MYID',
  'secret' => 'MYSECRET',
   'cookie' => true));


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

if($user){

 $user_profile = $facebook->api('/me');

    $query = mysql_query("SELECT * FROM users WHERE oauth_provider = 'facebook' AND oauth_uid = ". $user_profile['id']);
    $result = mysql_fetch_array($query);

    if(empty($result)){
        $query = mysql_query("INSERT INTO users (oauth_provider, oauth_uid, username) VALUES ('facebook', {$user_profile['id']}, '{$user_profile['name']}')");

        header('Location: user_page.php');
                                }else{
        header('Location: user_page.php');
         }


          }else{

        header('Location: logout.php');


        }


           ?>
于 2012-05-17T09:37:07.427 に答える
1
require 'lib/facebook-php-sdk/src/facebook.php';

define('APP_TITLE', 'Cool project');
define('APP_DESCRIPTION', 'Very nice project');
define('APP_ID', '168565339939940');
define('APP_SECRET', '4127eee9d3ab29a114e80h89060243a7');
define('APP_URL', 'https://localhost/project/');
define('APP_PERMISSIONS', '');

$user_id = null;
$user_profile = null;

$fb = new Facebook(array(
    'appId'  => APP_ID,
    'secret' => APP_SECRET,
    'cookie' => true,
));

$loginUrlParams = array(
  'scope' => APP_PERMISSIONS,
  'redirect_uri' => APP_URL,
);

$user_id = $fb->getUser();

if ( $user_id ) 
{
    try 
    {
        $data = $fb->api('/me');

        $user_profile = array(
            'user_id' => $user_id,
            'name' => isset($data['name']) ? he($data['name']) : null,
            'avatar' => 'https://graph.facebook.com/'.$user_id.'/picture',
        );

        unset($data);
    } 
    catch ( FacebookApiException $e ) 
    {
        header('Location: ' . $fb->getLoginUrl($loginUrlParams));
        exit;
    }
}
else
{
    header('Location: ' . $fb->getLoginUrl($loginUrlParams));
    exit;
}
于 2012-05-17T11:07:30.150 に答える
1

header("Location: $url");スクリプトの最後に追加する必要があるかもしれません。

于 2012-05-13T14:46:47.967 に答える
1

ユーザーだけをロードするのではなく、スクリプトを更新して $user プロファイルをロードまたはフェッチする必要があると思います..うまくいくかもしれません

于 2012-05-13T09:02:58.120 に答える
0

または、実行時にリダイレクトする必要がないことを通知するjavascriptまたはjqueryを使用します

于 2012-05-22T05:26:12.253 に答える