1

私は2つのログイン/登録オプションを提供します:Facebook接続と私自身のログイン/登録フォーム。

ユーザーがログインした後、fb connectを使用するか、フォームを使用するかに関係なく、同じページにユーザーを誘導したいと思います。

私はそれをどちらか一方のために機能させることができます。したがって、ユーザーがfb connectを介してログインすると、次のようなページに移動します。

//$_SESSION['user'] seems to be the facebook session. 
if(!isset($_SESSION['user'])) { 
   echo "sorry"; 
} else { 
   include"myconfig.php";
   $email = GetSQLValueString($_SESSION['user'], "text");
   //The email from fb has already been inserted into my mysql users table...
   $query = sprintf("SELECT * FROM users WHERE user_email = %s",$email);
   $res = mysql_query($query) or die(mysql_error());
   $row = mysql_fetch_array($res);
   echo($row['user_name']);
   echo "<b>   EMAIL : </b>" . $row['user_email'];
}               

そして、それはすべてうまくいきます。しかし、ユーザーが私のフォームでログインしている場合、fbセッションと一緒に別のセッションを設定するにはどうすればよいですか?ロジックを理解できないので、どこから始めればいいのかさえわかりません。「ユーザーがfbを介してログインしている場合は、ユーザーテーブルの行から自分の電子メールを含むものを表示します。または、ユーザーが私のフォームを介してログインしている場合は、その内容も表示します。」すべてのページに2つのバージョンを用意する必要があります。1つはfbユーザー用で、もう1つはフォームユーザー用ですか。

私はこの質問を他のどこにも見つけることができなかったので、解決策はとても簡単で、私だけがそれを得るのに愚かすぎると思います。

4

1 に答える 1

0

どのようにFacebookにログインさせるのか正確にはわかりませんが、個人的には次を使用します。

if ($fbinfo['facebook_app_id']) {
    // Create our Application instance (replace this with your appId and secret).
    $facebook = new Facebook(array(
        'appId'  => $fbinfo['facebook_app_id'],
        'secret' => $fbinfo['facebook_app_secret'],
    ));

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

    // Login or logout url will be needed depending on current user state.
    if ($user) {
        $logoutUrl = $facebook->getLogoutUrl();

        if (!$_SESSION['extened_fb_token']) {
            // ask for the extended token and get it from session ...
            $facebook->setExtendedAccessToken();
            $access_token = $_SESSION["fb_".FB_APP_ID."_access_token"];
            // now set it into the facebook object ....
            $facebook->setAccessToken($access_token);
            // now our fb object will use the new token as usual ...
            setCompanyFacebookExtendedToken($facebook->getAccessToken());
        }

        //print_r($_SESSION);
        //print_r(facebookGetUserPages($user));
        //echo $_SESSION['extened_fb_token'];
    } else {
        $loginUrl = $facebook->getLoginUrl(array('scope'=>'manage_pages,publish_stream'));
    }
}

これで、私はすでにデータベースにクエリを実行して、アプリキーが何であるかを調べました(データベースに「会社」があり、それぞれがユーザー用に独自のfbアプリを持つことができるため)。彼らの情報を使用して、FacebookAPIを使用してログインしているかどうかを確認します。そうでない場合は、ログインURLを生成します。ログインすると、$userFacebookユーザーIDが含まれます。これを自分のデータベースで照会して、実際にどのユーザーであるかを確認できます。trueのifステートメント内で、$userそのユーザーの電子メールアドレスをプルして自分の$_SESSION['user']変数に割り当てるdb呼び出しを行うことができます。したがって、あなたにとっては、次のようになります。

if (isset($_POST)) {
    //Handle your post normally here
}else{
    if ($fbinfo['facebook_app_id']) {
        // Create our Application instance (replace this with your appId and secret).
        $facebook = new Facebook(array(
            'appId'  => $fbinfo['facebook_app_id'],
            'secret' => $fbinfo['facebook_app_secret'],
        ));

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

        // Login or logout url will be needed depending on current user state.
        if ($user) {
            $logoutUrl = $facebook->getLogoutUrl();

            //This is just getting an extended token that is good for 60 days
            if (!$_SESSION['extened_fb_token']) {
                // ask for the extended token and get it from session ...
                $facebook->setExtendedAccessToken();
                $access_token = $_SESSION["fb_".FB_APP_ID."_access_token"];
                // now set it into the facebook object ....
                $facebook->setAccessToken($access_token);
                // now our fb object will use the new token as usual ...
                setCompanyFacebookExtendedToken($facebook->getAccessToken());
            }

            include"myconfig.php";

            //The email from fb has already been inserted into my mysql users table...
            $query = sprintf("SELECT * FROM users WHERE fb_id = %s",$user);
            $res = mysql_query($query) or die(mysql_error());
            $row = mysql_fetch_array($res);
            echo($row['user_name']);
            echo "<b>   EMAIL : </b>" . $row['user_email'];
                $_SESSION['user'] = $row['user_email'];
        } else {
            $loginUrl = $facebook->getLoginUrl(array('scope'=>'manage_pages,publish_stream'));
        }
    }
}

編集 申し訳ありませんが、これはあなたの質問に完全には答えていなかったと思います。実際には、独自のユーザーセッション変数の名前を変更するか、Facebookでログインしたら、Facebookから必要なデータを取得し、セッション変数を上書きします(基本的には、Facebookからログアウトしますが、必要なデータはすでに取得しています。とにかくFacebook)。実際、Facebookにログインするために必要なのはトークンだけだと思いますが、ページが読み込まれるたびにユーザーセッション変数が上書きされる可能性があるため、Facebookセッションを完全に削除する必要があります。または、セッション変数の名前を変更するだけです。

(私はまだfacebook apiを初めて使用するので、これが理にかなっていることを願っています。)

于 2012-12-11T21:21:17.303 に答える