3

Facebook PHP SDK を CodeIgniter と組み合わせて使用​​して、ユーザーが Facebook Connect を使用して自分のサイトにログインできるようにしようとしています。何を試しても、(どうやら) Facebook 経由の認証が成功した後でも、getUser() は常に 0 を返します。

CodeIgniter バージョン: 2.1.3

Facebook PHP SDK バージョン: 3.2.2

application/config フォルダに設定ファイル facebook.php を作成し、CodeIgniter の $this->load->library(...) メソッドを介して Facebook PHP SDK をロードしています。ライブラリは実際にロードされており、getAccessToken()、getAppId()、getAppSecret() などの多くの get...() メソッドを正常に呼び出すことができます。これらはすべて期待値を返します。

以下は、私のログイン コントローラーの簡略版です: (メール経由でログインする別の方法も提供していることに注意してください。そのため、CodeIgniter セッション コードが随所に散りばめられています)

class Login extends CI_Controller {

    public function __construct()
    {
        //Call parent constructor
        parent::__construct();

        //Magic sauce - not sure if this is required but a lot of other people
        //are recommending it to be included (happy to remove it if necessary)
        parse_str($_SERVER['QUERY_STRING'], $_REQUEST);

        //Load facebook library
        $facebook_config = $this->load->config('facebook');
        $this->load->library('facebook', $facebook_config);
    }

   public function index()
    {
        //Check if user is logged in
        $user_id = $this->session->userdata('user_id');
        $is_logged_in = $this->session->userdata('is_logged_in');

        if(($is_logged_in) && ($user_id != 0)) {
            //Logged in - redirect to game
            redirect('game');
        } else {
            //Not logged in
            //Get facebook login url
            $facebook_data = array(
                'redirect_uri' => 'hxxp://xxxxxxxx.com/facebook_login/',
                'scope' => 'email'
            );
            $data['facebook_login_url'] = $this->facebook->getLoginUrl($facebook_data);
            //Redirect to login form
            $this->load->view('login/login_form', $data);
        }
    }

    public function facebook_login()
    {
        //Always returns 0!! Even after authenticating via facebook!
        $facebook_user_id = $this->facebook->getUser();

        if ($facebook_user_id) {
            try {
                $user_profile = $this->facebook->api('/me');
                print_r($user_profile);
            } catch (FacebookApiException $e) {
                echo $e->getMessage();
            }
        } else {
            echo "Could not log in with Facebook";
        }
    }
}

簡略化されたビュー (login_form.php) は次のとおりです。

<html>
    <head>
        <title>Facebook Connect Test</title>
    </head>
    <body>
        <a href='<? echo $facebook_login_url; ?>'>Login with Facebook</a>
   </body>
</html>

hxxp://xxxxxxxx.com/facebook_login を login/facebook_login メソッドにリダイレクトするルートがありますが、これは機能しています。

このコードをライブ開発サーバーで実行しています。

私の現在の流れは次のとおりです。

  1. hxxp://xxxxxxxx.com/ を読み込みます (login_form ビューを読み込むログイン コントローラーへのルート)
  2. 「Facebookでログイン」リンクをクリック
  3. Facebookからログインするように求められます(私はそうしています)
  4. Facebook からアプリへの許可を求められます (私はそうしています)
  5. Facebook は、redirect_uri パラメーターで指定された URL にリダイレクトします。これは、アプリの設定ページのものと同じです。

そして、ここですべてがうまくいきません。$this->facebook->getUser() メソッドは、認証後でも常に 0 を返します。

私は Facebook の開発者向けドキュメントを精査してきましたが、これに対する答えを見つけようと考えることができるインターネット上のあらゆる場所を探しています。これに似た多くの投稿に出くわし、提案された解決策を適用しようとしましたが、役に立ちませんでした.

私は何を間違っていますか?

4

2 に答える 2