1

私はtwitterアプリケーションを開発しているので、承認にはtwitter_oauth gemを使用しています。これは非常に基本的なコードです。したがって、ユーザーが /login にアクセスすると、ユーザーは Twitter ログインにリダイレクトされ、ログインしてアプリの承認をクリックすると、私の Web サイトにリダイレクトされます。


  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 にリダイレクトされます。とにかく私はこれを克服することができますか?ログアウトしてもう一度ログインをクリックしたにもかかわらず、いくつかのサイトに気付きました。それは何かをして、Twitterサイトに行かなくてもログインしました。それ、どうやったら出来るの?私のトークンとシークレットは Cookie に保存されますか?

例: http://www.klout.com

4

1 に答える 1

0

アプリ用に独自のユーザー モデルを用意してから、サード パーティのアカウントをリンクする必要があります。OpenSocial 仕様では、アカウントを (ドメイン、ユーザー 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 に答える