Twitter - 已经拥有OAuth数据库,我如何知道用户是谁?

时间:2013-03-19 05:40:06

标签: php oauth twitter twitter-oauth

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

我正在使用PHP(库:Codebird-PHP& tmhOAuth),所以如果你能在PHP中展示一个很好的例子,但实际上我只是想知道我应该如何使用这些信息我正在存储。

谢谢!

2 个答案:

答案 0 :(得分:3)

我假设您将数据与一些用户名或用户ID一起存储,以识别您网站的用户并将其链接到正确的推特ID。为了获得用户的基本信息,授权后,您必须使用端点https://api.twitter.com/1.1/account/verify_credentials.jsonGET。 可以找到1.1 API的文档here

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

问题是Get current user's info from Twitter API可能重复,但我添加了答案,因为该讨论指向已弃用的API。不过,你在那里找到的代码仍然有用(它似乎使用亚伯拉罕威廉的图书馆,但步骤基本相同)。将类和函数替换为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.

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

答案 1 :(得分:0)

访问令牌: 1274865264 -QiVY50RGnmJz6AU9IPRxxiXfv4DYqo0nj6wg8hS

访问令牌秘密: fZQnHSuSpwARicIdLqkqQLy1JeG9LxrbNIRKypWcGR

访问令牌的第一部分是用户ID