Twitter OAuth 1.0. Opera yönlendirme hatası

Şu anda web sitesinde çalışıyorum. Birkaç yetkilendirme türü olacak ve bunlardan biri "Twitter üzerinden". Abraham Williams tarafından TwitterOAuth Kütüphanesi kullanıyorum. Aşağıdaki betiğin nasıl çalıştığını açıklamaya çalışacağım:

  1. index.php adresindeki "Giriş" düğmesine bastığınızda, açılır pencere (login.php) açılır ve uygulamayı twitter hesabınızla çalışması için yetkilendirmesini ister
  2. Gönderildiğinde, $ _GET parametresinde "erişim belirteci" olan api.twitter.com adresine yönlendirilir.
  3. Ardından twitter, "jeton" a izin verir ve bir twitter uygulamasının ayarlarında tanımlanan geri arama URL'sine döner.

Opera, api.twitter.com adresinden geri arama URL'sine yönlendirirken problem yaşarsa, mükemmel çalışır. Sadece yönlendirme hiç yapılmıyor gibi görünüyor.

İşte kaynaklar:

index.php

<?php
session_start();
session_destroy();
 ?>
<!DOCTYPE HTML>
<html>

    <head>

        <meta charset="utf-8" />
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
        <script type="text/javascript">
        function popup(url)
        {
            var addr = document.location.href.replace('index.php','');
            popUpObj = window.open(addr + url, 'Twitter', 'width=700,height=600,menubar=yes,status=yes');

        }

        function transferdata(data)
            {
                if (data.screen_name)
                {
                    (elem = document.getElementById('tw-login')).parentNode.removeChild(elem);
                    document.getElementById('menu').innerHTML = 'Hello, ' + data.screen_name;
                }
                else
                    document.getElementById('menu').innerHTML = 'Twitter didn\'t authorize you :(';
            }
        </script>
        
    </head>

    <body>
        Log in
        Log out
        <div id="menu">

        </div>      
    </body>
</html>

login.php

<?php
session_start();
include 'twitteroauth/twitteroauth.php';
define('TWITTER_KEY', '*******');
define('TWITTER_KEY_SECRET', '*******');


$twitteroauth = new TwitterOAuth(TWITTER_KEY, TWITTER_KEY_SECRET);
$requestToken = $twitteroauth->getRequestToken();
$_SESSION['oauth_token'] = $requestToken['oauth_token'];
$_SESSION['oauth_token_secret'] = $requestToken['oauth_token_secret'];

if($twitteroauth->http_code == 200)
{
    $url = $twitteroauth->getAuthorizeURL($requestToken['oauth_token']);
    header('Location: ' . $url);
}
else
{ 
    die('Something wrong happened.');  
}

callback.php

<?php
session_start();
include 'twitteroauth/twitteroauth.php';
define('TWITTER_KEY', '*******');
define('TWITTER_KEY_SECRET', '*******');

if (!empty($_GET['oauth_verifier']) && !empty($_SESSION['oauth_token']) && !empty($_SESSION['oauth_token_secret']))
{
    $twitteroauth = new TwitterOAuth(TWITTER_KEY, TWITTER_KEY_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
    $accessToken = $twitteroauth->getAccessToken($_GET['oauth_verifier']);
    $_SESSION['access_token'] = $accessToken;
    $userinfo = $twitteroauth->get('account/verify_credentials');
}
else
    header('Location: login.php');

?>
<!DOCTYPE HTML>
<html>
    <head>

        <meta charset="utf-8">
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
        <script type="text/javascript">
        $(document).ready(SendToMain());

        function SendToMain()
        {
            if(window.opener != null || !window.opener.closed)
            {
                window.opener.transferdata(<?php echo json_encode($userinfo); ?>);
                window.close();
            }
        }
        </script>

    </head>

    <body>
    </body>
</html>

session_clear.php

<?php
session_start();
session_destroy();
header('Location: index.php');
0
Bu API anahtarları gerçekten gizliyse, belki bunları Public StackOverflow yazısından kaldırmanız gerekir :-)
katma yazar hallvors, kaynak

2 cevap

Yönlendirmeli URI'nız ssl kullanmaz. Bu sorunu çözmek için https kullanın.

1
katma

Bazı tarayıcılara, yeniden yönlendirilmeden önce 301 veya 303 gibi bir durum kodu göndermeniz gerekir. Böyle bir şey deneyin:

header("Status: 303");
header("Location: /home.php");
exit;
0
katma
Bu durumda daha fazla ayrıntı vermeniz gerekecek - çünkü Twitter'ın aslında yönlendirme işlemini nasıl gerçekleştirdiğini bilmeden, bunu hata ayıklayamayız :-( Sorunu gösteren bir URL vermek istemiyorsanız, belki de Twitter'ın çeşitli tarayıcılara ne yolladığını keşfetmek için Fiddler HTTP hata ayıklayıcısı mı? BTW, intranet veya internete yönlendirdiğiniz site mi?
katma yazar hallvors, kaynak
Yönlendirmelerim düzgün çalışıyor. Geri arama başarısız olmak için api.twitter.com adresinden yönlendirin. Ne yazık ki twitter.com kaynaklarına erişimim yok :)
katma yazar mintobit, kaynak