Twitter OAuth +自动登录+ MYSQL

时间:2011-07-10 01:12:46

标签: php mysql oauth twitter-oauth

我正在使用https://github.com/abraham/twitteroauth库。我已经在Twitter上创建了我的应用程序,回调工作正常(甚至在本地主机上),但有一件事让我烦恼的是自动登录是如何发生的?我知道存在于MYSQL数据库中的“user_id”以及oauth_token和oauth_token_secret,但是如何在用户进入站点时立即获取user_id,因此我可以查询数据库以查看它是否已存在且不存在,无需一次又一次地弹出授权twitter弹出窗口然后到达回调?

我见过很多像这样的问题,但没有人以令人满意的方式回答过这个问题。

2 个答案:

答案 0 :(得分:0)

应该保存以用于自动验证用户的那些是oauth_access_token和oauth_access_secrete。你有没有设法从Twitter获得它们? Oauth steos是:

获取请求令牌 将用户发送给授权 交换访问令牌的请求令牌 使用桌面和带外的带外/ PIN码模式移动应用程序

请参考: http://dev.twitter.com/pages/auth

答案 1 :(得分:0)

实际上,它需要是PHP自己的$_SESSION和OAuth回调的混合体。回调后,设置您在数据库中插入的当前用户ID,或者从Twitter OAuth响应中查询“user_id”(您应该将其与用户名一起存储在数据库中),然后将其用于将来的参考,并使用{ {1}}包含您自己数据库中的注册用户数据。

所以,快速举例

$_SESSION

所以基本上,如果没有他点击LOGIN WITH TWITTER按钮,就无法完成AUTO LOGIN(就像用户已登录到twitter,并且已经注册到您的网站),除非您设置{{1的生命周期非常高(例如,就像twitpic一样)。

function action_login() { if ( ! $this->user->is_logged()) { // Create TwitterOAuth object with our Twitter provided keys $tOAuth = new TwitterOAuth($this->config->get('consumer_key'), $this->config->get('consumer_secret')); // Generate request tokens $requestToken = $tOAuth->getRequestToken(url::site('auth/twitter','http')); $_SESSION["oauth_token"] = $requestToken["oauth_token"]; $_SESSION["oauth_token_secret"] = $requestToken["oauth_token_secret"]; // Display Twitter log in button with encoded link $this->view->set('url', $tOAuth->getAuthorizeURL($requestToken["oauth_token"])); $_SESSION['current_url'] = Request::detect_uri(); } echo $this->view->render(); } public function action_twitter() { if ( empty($_GET["denied"]) && isset($_GET["oauth_token"])) { if ($_GET["oauth_token"] == @$_SESSION["oauth_token"]) { // Use generated request tokens (from session) to construct object $tOAuth = new TwitterOAuth($this->config->get('consumer_key'), $this->config->get('consumer_secret'), $_SESSION["oauth_token"], $_SESSION["oauth_token_secret"]); // Retrieve access token from Twitter $accessToken = $tOAuth->getAccessToken(); // Check we have valid response if(is_numeric($accessToken["user_id"])) { // Remove request token session variables if ($this->user->loaded() || $this->user->where('user_id', '=', $accessToken['user_id'])->find()->loaded()) { $this->user->values(array( 'oauth_token' => $accessToken['oauth_token'], 'oauth_token_secret' => $accessToken['oauth_token_secret'], 'screen_name' => $accessToken['screen_name'], ))->update(); } else { $this->user->values(array( 'user_id' => $accessToken['user_id'], 'oauth_token' => $accessToken['oauth_token'], 'oauth_token_secret' => $accessToken['oauth_token_secret'], 'screen_name' => $accessToken['screen_name'], ))->create(); } unset($_SESSION["oauth_token"]); unset($_SESSION["oauth_token_secret"]); echo $this->view->render(); // Redirect to main page } } } $this->request->redirect($_SESSION['current_url']); } 正在检查$_SESSION(MYSQL上的自动增量)和来自Twitter信息的$this->user->is_logged()

编辑:此外,最快捷,最干净的方法是使用Javascript SDK在页面加载时使用Twitter凭据进行AJAX调用,然后使用SDK提供的信息设置$_SESSION['id']变量