【问题标题】:How should I store twitter token so users don't have to go to twitter_oauth everytime?我应该如何存储 twitter 令牌,以便用户不必每次都去 twitter_oauth?
【发布时间】:2012-07-14 13:19:05
【问题描述】:

我正在开发 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

【问题讨论】:

  • 您可以将访问令牌保存在服务器上的数据库中。

标签: ruby twitter sinatra oauth-2.0 twitter-oauth


【解决方案1】:

您需要为您的应用拥有自己的用户模型,然后关联第 3 方帐户。 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 为该用户存储会话。

【讨论】:

    猜你喜欢
    • 2017-10-13
    • 2016-12-16
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2019-09-25
    • 2019-04-25
    • 2015-04-24
    • 2013-01-01
    相关资源
    最近更新 更多