2012-06-19 67 views
0

好吧,我正在嘗試使用Twitter API做一個非常簡單的登錄腳本。我需要的只是讓用戶通過Twitter登錄網站的一種簡單方法。如果他們目前沒有登錄,我的主頁上有一個按鈕,顯示「登錄或註冊Twitter」。如果他們已登錄,我希望它顯示他們的用戶名和他們的頭像。所以這是我到目前爲止,並沒有工作。使用Twitter OAuth登錄Twitter的問題(PHP)

在主頁上(的index.php),我有以下幾點:

<?php 
     require_once 'lib/twitteroauth/OAuth.php'; 
     require_once 'lib/twitteroauth/twitteroauth.php'; 
     require_once 'config/config.php'; 
     session_start(); 
?> 

config.php文件包含以下代碼(消費者鍵&消費者的祕密顯然替換):

<?php 
     $consumer_key = 'consumer key'; 
     $consumer_secret = 'consumer secret'; 
?> 

然後在頁面後面,我還會看到以下內容,其中顯示登錄/註冊消息或用戶名/頭像,具體取決於他們的登錄狀態。

<?php 
     if (!empty($_SESSION['request_token']) && !empty($_SESSION['request_token_secret'])) { 
      $twitterOAuth = new TwitterOAuth($consumer_key, $consumer_secret, $_SESSION['request_token'], $_SESSION['request_token_secret']); 
      $user = $twitterOAuth->get('account/verify_credentials'); 

      echo "Welcome ".$user->screen_name; 
      echo "<img src='".$user->profile_image_url."'/>"; 
     } else { 
      echo "<a href='twitter_login.php'>Sign In/Register With Twitter</a>"; 
      echo "<img src='images/twitter-banner.png'/>"; 
     } 
?> 

這就是index.php頁面。正如你所看到的,如果他們沒有登錄,並且他們點擊「登錄」鏈接,它將把他們帶到另一個頁面,即twitter_login.php。該文件的內容如下:

<?php 
     require_once 'lib/twitteroauth/OAuth.php'; 
     require_once 'lib/twitteroauth/twitteroauth.php'; 
     require_once 'config/config.php'; 

     session_start(); 

     $twitterOAuth = new TwitterOAuth($consumer_key, $consumer_secret); 

     $requestToken = $twitterOAuth->getRequestToken(); 

     $_SESSION['request_token'] = $requestToken['oauth_token']; 
     $_SESSION['request_token_secret'] = $requestToken['oauth_token_secret']; 

     header ('Location: '.$twitterOAuth->getAuthorizeURL($requestToken)); 
?> 

此頁面將自動將用戶重定向到Twitters授權URL。在twitter中設置的回調URL是「authenticate.php」。該文件的內容是:

<?php 
     require_once 'lib/twitteroauth/OAuth.php'; 
     require_once 'lib/twitteroauth/twitteroauth.php'; 
     require_once 'config/config.php'; 

     session_start(); 

     if ($_SESSION['request_token'] == $_GET['oauth_token']) { 
      $twitterOAuth = new TwitterOAuth($consumer_key, $consumer_secret, $_SESSION['request_token'], $_SESSION['request_token_secret']); 

      $accessToken = $twitterOAuth->getAccessToken(); 

      if (isset($accessToken['user_id']) && is_numeric($accessToken['user_id'])) { 
       $_SESSION['request_token'] = $accessToken['oauth_token']; 
       $_SESSION['request_token_secret'] = $accessToken['oauth_token_secret']; 
       header('Location: index.php'); 
      } else { 
       echo "Something went wrong."; 
      } 
     } else { 
      echo "OAuth Tokens Do Not Match."; 
     } 
?> 

在成功登錄後,用戶應重定向回index.php文件,然後將網頁應該顯示自己的用戶名/頭像。在我自己的測試中,我發現它在Firefox中嘗試時效果很好,但當我在任何其他瀏覽器(Safari/Chrome)中嘗試它時,它似乎都停留在Twitter授權中。任何想法我做錯了什麼,或者我能做些什麼來改進/修復這個腳本?我正在努力解決這個問題。

預先感謝您!

+0

凹凸?任何人? Bueller? Bueller? –

回答

0

我認爲你的回調網址正在打破。您可以使用任何工具或瀏覽器調試器來查看它,以瞭解正在進行身份驗證的網址發生了什麼。

+0

我在找什麼?當我到達身份驗證頁面時,它會返回錯誤「OAuth令牌不匹配」。如果您想自行檢查腳本,可以訪問以下URL:http://www.fontastiq.com,然後單擊頂部的「使用Twitter登錄」按鈕。 –

+0

剛纔我的推特帳戶授權沒有任何問題。我使用了Chrome。在查看控制檯時,我收到了幾個404錯誤。 GET http://www.fontastiq.com/js/globalActions.js 404(未找到)index.php:10 GET http://www.fontastiq.com/images/facebook.png 404(未找到)索引。 php:131 GET http://www.fontastiq.com/images/twitter.png 404(Not Found)index.php:132 GET http://www.fontastiq.com/images/pinterest.png 404(Not發現) – MACMAN