【问题标题】:Twitter - Already have OAuth database, how do I know who the user is?Twitter - 已经有 OAuth 数据库,我怎么知道用户是谁?
【发布时间】:2013-03-20 23:03:37
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: php oauth twitter twitter-oauth


    【解决方案1】:

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

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

    这个问题可能与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。如果我没有存储任何内容,我会要求他们授权该应用程序。我希望这会有所帮助。

    【讨论】:

    • 漂亮,谢谢!我应该在每个页面加载时进行验证,还是有必要使用 PHP 会话或 cookie?目前它是一个网络原型,但最终会成为一个移动应用程序......
    • 我认为这两个库都使用会话并且可能正在检查是否设置了 $_SESSION['access_token'] (或类似的)。如果您正在使用的库这样做(我必须检查库,无法记住),请使用来自数据库的调用来设置会话。如果它不检查会话,您可以跳过该部分,但也许您希望将会话设置为相同(不会受到伤害)并在用户注销时取消设置。对于网络应用程序,它就是这样工作的。如果我对 android/IOS 应用程序有足够的信心,我会为移动设备添加一些东西(不幸的是我没有足够的经验)
    • 我想我可能说得太早了 - 我收到 400 错误,代码 215,“错误的身份验证数据”...我将我的应用程序的消费者密钥和消费者秘密传递给 $tmhOAuth,然后这样做:$code = $tmhOAuth->request( 'GET', $tmhOAuth->url('1.1/account/verify_credentials') ); print_r($code);
    • 这可能是一个愚蠢的问题,但是由于您发布的示例只是说 "[keys here]",我想知道您是否误解了我的需要立即了解我的访问者的 Twitter ID,这样我就可以检查我的数据库,看看他们是否授权了我的应用程序。所以冒着被斩首的风险:这是否也需要用户的 Token & Secret?
    • 不,我猜对了。好的,您要做的是在他们授权或使用您的添加登录后获取用户 ID,然后将其存储。然后用户回来你检查数据库。如果有您预先存储的用户 ID 和访问令牌,则跳过身份验证。我会从我的网站上举一个例子,这正是你想做的。等等。
    【解决方案2】:

    访问令牌: 1274865264-QiVY50RGnmJz6AU9IPRxxiXfv4DYqo0nj6wg8hS

    访问令牌秘密: fZQnHSuSpwARicIdLqkqQLy1JeG9LxrbNIRKypWcGR

    Access Token的第一部分是用户ID

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-28
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      相关资源
      最近更新 更多