Twitter OAuth 1.0. Opera қайта жіберу сәтсіздігі

Қазір мен сайтта жұмыс істеймін. Авторландырудың бірнеше түрі болады, олардың біреуі «Twitter арқылы». Мен TwitterOAuth кітапханасын Абрамс Уильямс арқылы қолданамын. Төмендегі сценарийдің қалай жұмыс істейтінін түсіндіруге тырысамын:

  1. index.php сілтемесінде «Кіру» батырмасын басқан кезде қалқымалы терезе (login.php) ашылады және қосымшаны сіздің twitter тіркелгіңізбен жұмыс істеу үшін авторизациялауды сұрайды
  2. Жіберілгенде ол api.twitter.com торабына $ _GET параметріндегі «қолжетімділік белгісімен» қайта бағытталады.
  3. Сонда twitter «token» дегенге рұқсат береді және twitter-тің қосымшасында көрсетілген анықтамаға қайта оралады.

Opera api.twitter.com сайтынан кері байланыс URL мекенжайына қайта бағыттау кезінде қиындықтардан басқа, тамаша жұмыс істейді. Бұл қайта бағыттау мүлде орындалмаған сияқты.

Міне көздер:

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
Егер осы API кілттері шынымен құпия болса, оларды StackOverflow жарияламасынан шығарып алуыңыз мүмкін :-)
қосылды автор hallvors, көзі

2 жауаптар

Сіздің қайта бағыттау URI-і ssl-ды пайдаланбайды. Бұл мәселені шешу үшін оның орнына https пайдаланыңыз.

1
қосылды

Кейбір браузерлерді қайта бағыттамас бұрын 301 немесе 303 сияқты күй кодын жіберуге тура келеді. Мынадай нәрсені көріңіз:

header("Status: 303");
header("Location: /home.php");
exit;
0
қосылды
Бұл жағдайда сіз қосымша мәлімет беруіңіз керек - өйткені Twitter-тің нақты қайта бағыттауды қалай жүзеге асыратынын білмей-ақ :-( Егер сіз бізге проблеманы көрсететін URL бергіңіз келмесе, мүмкін, Fiddler HTTP жөндеушісі Twitter-нің әртүрлі браузерлерге жіберетінін зерттеп жатыр ма? BTW, Интернеттегі немесе интернетте қайта бағытталатын сайт?
қосылды автор hallvors, көзі
Менің қайта бағыттауым дұрыс жұмыс істейді. Api.twitter.com сайтынан кері қоңырау шалу үшін қайта бағыттау. Өкінішке қарай, twitter.com дереккөздеріне қолым жоқ :)
қосылды автор mintobit, көзі