ユーザーが 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 ブロックにあります。新しいトークンを取得しようとしてページに再度リダイレクトされるため、ループが発生します。しかし、どうすれば有効なトークンを取得できますか?