1

我正在开发 twitter 应用程序,所以我使用 twitter_oauth gem 进行授权。这是非常基本的代码。因此,如果用户转到 /login,它将重定向用户到 twitter 登录,一旦他登录并单击授权应用程序,他将被重定向回我的网站。


  begin
    callback = ENV['twitter_callback'] || "http://127.0.0.1:4567/login/success"
    request_token = @twitterClient.request_token(:oauth_callback => callback)
    MemcacheUtil::set("request_token_twitter", request_token, 3000)
    redirect request_token.authorize_url
  rescue Exception => e  
    puts e.message  
    puts e.backtrace.join("\n") 
    raise Exception.new("Something's wrong with twitter!")
  end

这就是我想做的。如果用户退出并且他想再次登录。现在,如果他点击登录按钮,他将再次被重定向到 Twitter 以授权该应用程序。无论如何我可以克服这个。即使我注销并再次单击登录,我也会注意到一些站点。它做了一些事情并让我登录而不去推特网站。我怎么做?他们是否将我的令牌和秘密保存在 cookie 中?

例如:http ://www.klout.com

4

1 回答 1

0

您需要为您的应用拥有自己的用户模型,然后关联 3rd 方帐户。OpenSocial 规范将 Account 定义为(域、用户 ID、用户名),因此这可能是一个安全的选择。您也可以将其存储在 memcached 中,或者使用不同的存储空间,然后根据 Web 应用程序还是本机应用程序将您的密钥存储在设备或 cookie 中。不要将令牌存储在 cookie 中,存储对您的用户的引用,然后在第一次请求时执行查找,并可能将您自己的身份验证令牌存储在 memcached 中以用于“会话”。

用户的简单 MySQL 表:

CREATE TABLE IF NOT EXISTS user (id INT NOT NULL AUTO_INCREMENT, name VARCHAR(48), ..., PRIMARY KEY (id));

CREATE TABLE IF NOT EXISTS user_accounts (id INT NOT NULL AUTO_INCREMENT, domain VARCHAR(64), user_id VARCHAR(32), username VARCHAR(32), status TINYINT(1), PRIMARY KEY (id));

或者

用户/帐户的简单 JSON 对象(例如使用您自己的密钥存储在 memcached 中)

"user":{"id":yourId, "name":"Some Name", 
    "accounts":[{"domain":"twitter.com", "user_id":"sometoken", "username":"handle"}]
}

希望这会有所帮助。密钥是存储您自己的用户,然后在后续访问期间将您的密钥作为 cookie 或在设备上引用并执行您自己的查找。为了提高性能,您不想查找每个请求,因此我建议您使用 memcached 来为该用户存储会话。

于 2012-07-15T12:11:09.700 回答