0

我已经建立了一个数据库,其中包含一个成功填充最终(永久?)OAuth 用户令牌和 OAuth 用户密钥的表。我不明白的是我应该如何知道当前用户的 ID 是什么,尤其是在他们上次登录后 2 周之后。我的应用程序被所有用户授权,所以理论上 Twitter 可以查看当前用户的授权应用程序列表并共享 Twitter 用户 ID,对吗?是否有一些好的方法可以(代表当前用户)请求他的 ID 是什么?我觉得临时令牌应该能够以某种方式促进这一点......如果它有帮助,我的应用程序中的每个用户都只是一个带有一些额外信息的 Twitter 帐户。我只是在寻找利用我数据库中的令牌和秘密的最佳方式......

我正在使用 PHP(库:Codebird-PHP 和 tmhOAuth),所以如果您可以在 PHP 中展示一个示例,那就太好了,但实际上我只是想知道我应该如何使用我存储的这些信息.

谢谢!

4

2 回答 2

3

我假设您将数据与一些用户名或用户 ID 一起存储,这些用户名或用户 ID 可以识别您网站的用户并将他们链接到他们正确的 Twitter ID。为了获取用户的基本信息,授权后,您必须使用https://api.twitter.com/1.1/account/verify_credentials.json带有GET. 可以在此处找到 1.1 API 的文档。

这将返回一个数组。您可以在or下找到用户名 uder"screen_name"和用户 ID 。"id""id_string"

该问题可能与Get current user's info from Twitter API重复,但我添加了一个答案,因为该讨论指向已弃用的 API。尽管如此,您在那里找到的代码仍然有用(它似乎使用了 Abraham William 的库,但步骤基本相同)。用 Matt Harris 库中的类和函数替换这些类和函数。我不知道codebird,对不起!

编辑:我还提供了一个代码示例(经过测试和工作,虽然我有 tmhOAuth 的问题,所以我偶尔只为自己使用它。我注意到,当我尝试发布时,它有时会返回一些奇怪的错误代码,我不知道为什么):

      // Authentication page, with button. You have already connected to your database

        $mywebsiteuser = $_SESSION['website_user_id'];
        $query= "SELECT * FROM `table_where_you_store_twitter` WHERE website_user_id ='$mywebsiteuser'";
        $sql= $mysqli->query($query) or die($mysqli->error.__LINE__); // or whatever else to check is the query fails.
        if ($sql->num_rows != 0){

        //etc. retrieve data and set the sessions.


       // already got some credentials stored? 
    if ( isset($_SESSION['access_token']) ) {
      $tmhOAuth->config['user_token']  = $_SESSION['access_token']['oauth_token'];
      $tmhOAuth->config['user_secret'] = $_SESSION['access_token']['oauth_token_secret'];

      $code = $tmhOAuth->request('GET', $tmhOAuth->url('1/account/verify_credentials'));
      if ($code == 200) {
        $resp = json_decode($tmhOAuth->response['response']);
        echo $resp->screen_name;
        echo  $resp->id;
//Etc. Instead of printing them you it's a good idea to store them in the db.
      } else {
        outputError($tmhOAuth);
      }
    // we're being called back by Twitter
    } elseif (isset($_REQUEST['oauth_verifier'])) {
      $tmhOAuth->config['user_token']  = $_SESSION['oauth']['oauth_token'];
      $tmhOAuth->config['user_secret'] = $_SESSION['oauth']['oauth_token_secret'];

      $code = $tmhOAuth->request('POST', $tmhOAuth->url('oauth/access_token', ''), array(
        'oauth_verifier' => $_REQUEST['oauth_verifier']
      ));

      if ($code == 200) {
    //etc.

无论如何,总而言之,为了获取用户的信息,您需要他们首先授权您的应用程序。我检查我的用户是否在我的网站上使用用户会话变量,而不是通过 Twitter。如果我没有存储任何内容,我会要求他们授权该应用程序。我希望这有帮助。

于 2013-03-19T14:02:20.460 回答
0

访问令牌: 1274865264 -QiVY50RGnmJz6AU9IPRxxiXfv4DYqo0nj6wg8hS

访问令牌秘密: fZQnHSuSpwARicIdLqkqQLy1JeG9LxrbNIRKypWcGR

Access Token的第一部分是用户 id

于 2013-03-19T14:07:29.470 回答