0

好吧,我正在尝试使用 Twitter API 做一个非常简单的登录脚本。我所需要的只是用户通过 Twitter 登录网站的简单方法。我的主页上有一个按钮,上面写着“登录或注册 Twitter”,如果他们当前没有登录。如果他们已经登录,我希望它显示他们的用户名和他们的头像。所以这就是我到目前为止所拥有的,但它不起作用。

在主页(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));
 ?>

此页面将自动将用户重定向到 Twitter 授权 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 授权上。知道我做错了什么,或者我可以做些什么来改进/修复这个脚本?我在我的智慧尽头试图弄清楚这一点。

先感谢您!

4

1 回答 1

0

我认为您的回调网址正在中断。您可以使用任何类型的工具或浏览器调试器对其进行检查,以了解正在验证的 url 发生了什么。

于 2012-06-19T07:01:09.510 回答