【问题标题】:Session expiring for twitter oAuthtwitter oAuth 的会话即将到期
【发布时间】:2014-01-23 06:35:14
【问题描述】:

我正在使用 Abraham Williams 的 oAuth 库来更新状态。该应用程序没有 UI(除了来自 Twitter 的凭据提示。相反,用户在浏览器中输入 URL。

调用 URL 时,我收到错误消息:“无法发布推文。错误:原因:1”。

我插入了一些测试代码,似乎会话在转换之间丢失了:$_SESSION['tweetmsg'] 在 index.php 的初始调用中设置,但是当切换到 connect.php 时发生,似乎会话丢失了。有什么想法吗?

以下是源码:

index.php

<?php
include_once '../../winsinclude/tw_config.php';
require_once "../../winsinclude/twitteroauth.php";
require_once "../../winsinclude/OAuth.php";
session_start();
if (empty($_SESSION['access_token'])) {
  $_SESSION['tweetmsg'] = create_tweet_text();
  print "<script>self.location='./connect.php');</script>";
}

$connection = new TwitterOAuth(
  CONSUMER_KEY,
  CONSUMER_SECRET,
  $_SESSION['access_token']['oauth_token'],
  $_SESSION['access_token']['oauth_token_secret']
);

if (!isset($_SESSION['tweetmsg'])) {
  exit('No tweet value in session or from form');
}
$tweetmsg = $_SESSION['tweetmsg'];
$result = $connection->post('statuses/update', array('status' => $tweetmsg));
unset($_SESSION['tweetmsg']);
if (200 === $connection->http_code) {
  echo 'Tweet Posted: '.$tweetmsg;
}
else {
  echo 'Could not post Tweet. Error: '.$httpCode.' Reason: '.
  session_destroy();
}
function create_tweet_text () {
  return 'this is a test';
}

connect.php

?php
session_start();
include_once '../../winsinclude/tw_config.php';
require_once "../../winsinclude/twitteroauth.php";
require_once "../../winsinclude/OAuth.php";

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
$request_token = $connection->getRequestToken(OAUTH_CALLBACK.'callback.php');

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

$url = $connection->getAuthorizeURL($request_token);
print "<script>self.location='$url';</script>";

回调.php

<?php
session_start();
include_once '../../winsinclude/tw_config.php';
require_once "../../winsinclude/twitteroauth.php";
require_once "../../winsinclude/OAuth.php";

if (
  isset($_REQUEST['oauth_token']) 
  && $_SESSION['oauth_token'] !== $_REQUEST['oauth_token']
) {
  echo 'Session expired';
}
else {
  $connection = new TwitterOAuth(
    CONSUMER_KEY,
    CONSUMER_SECRET,
    $_SESSION['oauth_token'],
    $_SESSION['oauth_token_secret']
  );
  $_SESSION['access_token'] = $connection->getAccessToken($_REQUEST['oauth_verifier']);
  print "<script>self.location='index.php';</script>";
}

【问题讨论】:

    标签: session twitter oauth


    【解决方案1】:

    最近 Twitter 停用了一些用于 oAuth 的 http url,并将它们替换为 https 等效项。如果您可以在包含中看到 URL 字符串 http://twitter.com/oauth/request_token,则意味着您需要关注 https://dev.twitter.com/discussions/10803 并将所有调用更改为 https...

    【讨论】:

    • 如果你阅读我发布的源代码,你会发现我没有在没有特定端点的情况下调用 twitter API,而且我使用的是 Abraham Williams 的库,它不调用 API 库不使用特定的端点。
    猜你喜欢
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2011-09-19
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 2019-08-20
    相关资源
    最近更新 更多