1

ユーザーが index.php のリンクを押したときに、ユーザーをログに記録してデータベースに登録しようとしています。私は答えを求めてインターネット全体を検索しました。私はこのコードに 4 日間以上取り組み、さまざまな方法でコードを書きましたが、トークンによって引き起こされたこの oauthexception 問題を解決したものはありませんでした。だから私はそれをループに入れて、時にはうまくいく。なんで?うまくいくときとうまくいかないときがあるのはなぜですか?

これは私の fbLogin.php です

session_start();
if(!(isset($_SESSION['fb']))){
    $fb=new FbConnection();
    $url=$fb->getLoginUrl();
    $_SESSION['fb']=$fb;
    header("Location: $url");
    exit;
}
$fb=$_SESSION['fb'];
try{
$fbUser=$fb->getUser();
}catch(Exception $e){
    sleep(3);
    header("Location: fbLogin.php");
    exit;   

}

これは私の FbConnection です

class FbConnection{
    private $facebook;

    public function __construct(){
        $this->facebook=new Facebook(array(
            'appId'     => '******',
            'secret'    => '*******',
            ));         
    }

    public function getUser(){
        $user=$this->facebook->getUser();
        if($user){
            try {
                $this->facebook->api('/me');
                }catch(Exception $e){
                    print("errore preso<br>");
                    error_log($e);
                    $user = null;
                    //self::reloadToken();
                    }
        }
        $user=$this->facebook->api('/me');
        $name=$user['first_name'];
        $lastName=$user['last_name'];
        $email=$user['email'];
        $sex=$user['gender'];
        $birthday=$user['birthday'];
        $res=$this->facebook->api('me?fields=third_party_id');
        $tpid=$res['third_party_id'];
        //print($tpid."<br>");
        $fbUser=new FacebookUser($name, $lastName, $email, $sex, $birthday, $tpid);
        return $fbUser;

    }    

    public function getConnectionStatus(){
        if($_SESSION['user']->third_party_id)
            return true;
        return false;   
    }
    public function connect(){
        if($_SESSION['user']->third_party_id)
            throw new FacebookAlreadyConnectedException('Questo account è già associato ad un account Facebook');
        $fbUser=$this->getUser();
        $user=$_SESSION['user'];
        $result=UserManager::searchByContent('third_party_id', $fbUser->third_party_id);
        if($result) throw new FacebookAlreadyRegisteredException('Questo account Facebook è già registrato');
        else
        $user->third_party_id=$fbUser->third_party_id;

    }

    public function getLogoutUrl(){
        if(!self::getConnectionStatus())
            return 'index.php';
        $params = array( 'next' => *****' );
        return $this->facebook->getLogoutUrl($params); // $params is optional.
    }

    public function getLoginUrl(){
        $params=array('scope' => 'email, user_birthday',
  'redirect_uri' => ***/fbLogin.php);
            return $this->facebook->getLoginUrl($params);
        }

        }

そして、これはindex.phpのリンクコードです

アクセディ トラミテ Facebook

どうしたの?ループすることもあれば、うまくいくこともあります。

無効なトークンを使用して facebook->api クラス メソッドを呼び出す fb->getUser() によって oAuthException がスローされるため、ループは try/catch ブロックにあります。新しいトークンを取得しようとしてページに再度リダイレクトされるため、ループが発生します。しかし、どうすれば有効なトークンを取得できますか?

4

0 に答える 0