web-dev-qa-db-ja.com

Facebookへのカスタム接続、問題ログイン/ログアウト

私はFacebook経由で私のユーザーのログインのためのカスタム機能に取り組んでいます。

私はfacebookでログインする方法についてのこの素晴らしいチュートリアルを読むことから始めました: http://digitalzoomstudio.net/2013/02/09/tutorial-how-to-login-via-facebook-あなたのワードプレスブログ/

自分のfacebookメールアドレスを持つアカウントがすでにwordpressブログに存在する場合、この関数はユーザーをwordpressにログインさせます。存在しない場合は、ユーザーのアカウントを自動的に作成します。

期待通りにすべてが動作します。しかし、ログインとログインで問題があります。

「Facebookでログイン」ボタンがあります。ユーザーがログインした場合、このボタンはログアウトに変わります(このログアウトボタンはユーザーをFacebookからログアウトさせることになっています)。

一つの問題(ログイン):

  • ユーザーが初めて「フェイスブックにログイン」ボタンをクリックすると、ユーザーはワードプレスのブログにログインします。ただし、Facebook APIではユーザーが認識されないため、FacebookのログインボタンにLOGOUTボタンではなくLOGINボタンを出力させます。

  • 2回目にユーザーが「ログイン」ボタンをクリックすると、Facebook APIはユーザーを認識し、ボタンは「ログアウト」に変わります。

それでは、なぜ初めてユーザーがfacebookに認識されていないのに2回目になっているのでしょうか。

他の問題はこれです(ログイン):

  • ユーザーが初めてfacebookのLOGINボタンを押して、カスタムメイドのログアウトボタンを使って私のwordpressブログからログアウトしたい場合(このボタンはFacebookからではなくブログからのみユーザーをログアウトさせることになっています)完全に!

  • ただし、facebookの[LOGIN]ボタンをもう一度クリックしてログインした場合は、ユーザーを正常にログアウトさせるためにカスタムメイドのログアウトボタンを2回クリックする必要があります。

私はこれを部分的に解決する方法を知っています。ユーザーがブログにログインしているかどうかを確認して[ログイン]ボタンを削除するだけです。しかし、なぜ私はfacebookからこの奇妙なふるまいをしているのか、そしてそれがどうやって私のブログと衝突しているのか知りたいのです。

更新

2番目の問題(ユーザーがログアウトしたとき)では、解決策が見つかりました。私はちょうどFacebookのセッションを破壊しなければなりませんでした$facebook->destroySession();

更新2:解決しました!

私が提供したリンクからのチュートリアルは、ログイン後や何らかの理由で新しいアカウントを作成したときにfacebookセッションを破壊することでした。両方の部分から$facebook->destroySession();を削除するだけで、すべてが意図したとおりに機能しています。

2
Gixty

私が提供したリンクからのチュートリアルは、ログイン後のFacebookセッションを破壊し、何らかの理由で新しいアカウントを作成することでした。 $ facebook-> destroySession()を削除するだけです。両方の部分から、そして今、すべてが意図したとおりに機能しています。

これはチュートリアルからのコードで、両方の行がコメントアウトされています。

if ($fbuser) {


    $fb_registerpage_name = __('Facebook Register', 'bloora');
    $fbpage = get_page_by_title( $fb_registerpage_name );

    if(isset($user_profile['email'])){
        $user_name = $user_profile['email'];
        $user_email = $user_profile['email'];
        $user_id = username_exists( $user_name );
        if ( !$user_id and email_exists($user_email) == false ) {
                $random_password = wp_generate_password( $length=12, $include_standard_special_chars=false );
                $user_id = wp_create_user( $user_name, $random_password, $user_email ); 
                wp_set_current_user( $user_id );
                wp_set_auth_cookie( $user_id );
               // $facebook->destroySession(); THIS HAS TO BE REMOVED

        } else {
                $random_password = __('User already exists.  Password inherited.');

                wp_set_current_user( $user_id );
                wp_set_auth_cookie( $user_id );
               // $facebook->destroySession(); THIS HAS TO BE REMOVED!
        }
    }else{

        if(!is_admin() && isset($_POST) && count($_POST) > 0){

            if($fbpage){

                echo '<script>if(window.location.href != "'.get_permalink($fbpage->ID).'"){ window.location.href = "'.get_permalink($fbpage->ID).'"; }</script>';
            }else{
                // Create post object
                $my_post = array(
                  'post_title'    => $fb_registerpage_name,
                  'post_content'  => 'This is my post.',
                  'post_status'   => 'publish',
                  'post_type'   => 'page',
                  'post_author'   => 1
                );

                // Insert the post into the database
                $fbpage = wp_insert_post( $my_post );
                echo '<script>if(window.location.href != "'.get_permalink($fbpage->ID).'"){ window.location.href = "'.get_permalink($fbpage->ID).'"; }</script>';

            }
        }
    }
}
1
Gixty