我已经设置了一个数据库,其中包含一个成功填充最终(永久?)OAuth用户令牌和OAuth用户密钥的表。我不明白的是我应该知道当前用户的ID是什么,特别是在他们上次登录后的两周内。我的应用程序是由其所有用户授权的,因此理论上Twitter可以查看当前用户的授权应用程序列表并共享Twitter用户ID,对吧?是否有一些好的方式(代表当前用户)请求他的ID是什么?我觉得临时代币应该能够以某种方式促进这一点...如果它有所帮助,我的应用程序中的每个用户只是一个Twitter帐户,有一些额外的信息。我只是在寻找利用我数据库中的令牌和秘密的最佳方法......
我正在使用PHP(库:Codebird-PHP& tmhOAuth),所以如果你能在PHP中展示一个很好的例子,但实际上我只是想知道我应该如何使用这些信息我正在存储。
谢谢!
答案 0 :(得分:3)
我假设您将数据与一些用户名或用户ID一起存储,以识别您网站的用户并将其链接到正确的推特ID。为了获得用户的基本信息,授权后,您必须使用端点https://api.twitter.com/1.1/account/verify_credentials.json
和GET
。
可以找到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