2

私は codeigniter.after 認証の下で Facebook Connect を使用しています。私のコントローラーの成功メソッドでリダイレクトしたいのですが、ここに私のコントローラーがあります:

class Welcome extends CI_Controller {
function __construct()
{
    parent::__construct();

    $this->load->model('Facebook_model');
}

function index()
{
    $fb_data = $this->session->userdata('fb_data');

    $data = array(
                'fb_data' => $fb_data,
                );

    $this->load->view('welcome', $data);
}

function topsecret()
{
    $fb_data = $this->session->userdata('fb_data');

    if((!$fb_data['uid']) or (!$fb_data['me']))
    {
        redirect('welcome');
    }
    else
    {
        $data = array(
                    'fb_data' => $fb_data,
                    );

        $this->load->view('topsecret', $data);
    }
}
function success()
{
    $this->load->view('welcome_message');
}
}

Facebook APIアクセスの私のモデル:

class Facebook_model extends CI_Model {
public function __construct()
{
    parent::__construct();
    $config = array(
                    'appId'  => '261066574000678',
                    'secret' => '   79e11f65449988965362f58e9a4aabd7',
                    'fileUpload' => true, // Indicates if the CURL based @ syntax for file uploads is enabled.
                    );

    $this->load->library('Facebook', $config);

    $user = $this->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.
    $profile = null;
    if($user)
    {
        try {
            // Proceed knowing you have a logged in user who's authenticated.
            $profile = $this->facebook->api('/me?fields=id,name,link,email');
        } catch (FacebookApiException $e) {
            error_log($e);
            $user = null;
        }       
    }

    $fb_data = array(
                    'me' => $profile,
                    'uid' => $user,
                    'loginUrl' => $this->facebook->getLoginUrl(
                        array(
                            'scope' => 'email,user_birthday,publish_stream', // app permissions
                            'redirect_uri' => 'https://sanjay.localhost.com/index.php/welcome/success' // URL where you want to redirect your users after a successful login
                    )
                    ),
                    'logoutUrl' => $this->facebook->getLogoutUrl(),
                );

    $this->session->set_userdata('fb_data', $fb_data);
}
}

これをローカルホストホストでテストしているので、ホストファイルも編集し、ローカルホストのホスト名を sanjay.localhost.com.redirect に変更しました
。 >https://sanjay.localhost.com/index.php/welcome/success?state=ff5712299510defa&code=AQCaD-FAd1shuW# =
クエリ文字列内の状態とコードを処理する方法がわかりません。助けてください。

4

1 に答える 1

0

私のブログで私に連絡してくれてありがとう。まず第一に、Facebookはローカルホストのサポートを廃止しました。彼女はリンクhttps://developers.facebook.com/bugs/128794873890320です。

codeigniterを使用してアプリを開発したことはありません。CakePHPを使用していますが、認証のフォローは同じである必要があります。
1.ユーザーコントローラーでfb_login関数を作成します。
2.この関数はこのロジックに従います。a。$facebook->getUser()ユーザーIDを取得するために使用します。b。次に $facebook->api('/me')、確認するために使用します。
3. FacebookApiExceptionが発生した場合は、Facebookでログインするようにユーザーを送信します。公式SDKを使用する場合は、現在のURLがリダイレクトURLに追加されます。
4. Facebookは、サインイン後にユーザーをリダイレクトします。したがって、を使用してデータを取得します$facebook->getUser()。このデータをセッションに保存して、アプリでさらに使用できるようにします。次に、ユーザーをコントロールページまたはその他のページにリダイレクトします。CakePHPにはsetFlash()コントロールパネルで設定されたメッセージを表示する関数。Codeignatorにはこのようなものが必要だと思います。そうでない場合は、セッションでメッセージを設定してユーザーをリダイレクトするだけです。次に、メッセージを表示した後、メッセージの設定を解除します。

これが完全なコードです

$uid = $facebook->getUser();        
try {
    $user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) { 
    //echo $e->getMessage();
    $uid = null;
}

$loginUrl   = $facebook->getLoginUrl(
        array(
            'scope'         => 'publish_stream,offline_access,email'
        ),''
);

if (!$uid) {
    echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
    exit;
}
//search using uid on your user table to check if the use is returnign user or new user.
if($new_user ==1)
{
    $this->Session->setFlash('please sign up');
    //redirect to sign up
}
else
{
    $this->Session->setFlash('you are good lad');
    //reditect to control panel
}

于 2012-06-10T08:25:39.580 に答える