0

そのため、Rails アプリで Omniauth を使用して OAuth をセットアップすると、次のような意図しない動作に遭遇しました。

ユーザーが以前に OAuth プロバイダー (Facebook など) に対して認証されている場合、資格情報はブラウザーのどこかに保存されます。別のユーザーが同じブラウザーで OAuth 要求を作成しようとすると、最初のユーザーから保存されたデータが使用されます!

OAuth リクエストで保存された資格情報を使用せず、毎回ユーザーにアプリを承認させる方法はありますか?

以下のコードを使用してコントローラーにヘッダーを追加しようとしましたno-cacheが、もちろん何もしませんでした。要求はプロバイダーの OAuth エンドポイントに対するものであり、アプリの内部のどこにもないためです。

  before_filter :set_cache_buster

  def set_cache_buster
    p "CACHE BBBBUSTED!"
    response.headers["Cache-Control"] = "no-cache, no-store, max-age=0,must-revalidate"
    response.headers["Pragma"] = "no-cache"
    response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
    request.headers["Cache-Control"] = "no-cache, no-store, max-age=0,must-revalidate"
    request.headers["Pragma"] = "no-cache"
    request.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
  end

何か案は?

4

2 に答える 2

1

正しく理解できれば、Omniauth を介して Facebook 資格情報を使用してログインできます。また、アプリケーションを終了した後も、ユーザーはFacebookで認証されたままになります(アプリでも OAuth でもないため、Cookie をダンプしても役に立ちません)。そのため、次にアプリにログインしようとすると (「facebook でログイン」リンク/ボタンをクリック)、Facebook は何も要求しません (ユーザーは既に facebook で承認されており、アプリケーションのアクセス許可も設定されています)。資格情報を返すだけなので、アプリは先に進み、前のユーザーを許可します。

必要なのは、アプリからログアウトするたびに Facebook からログアウトすることだと思います。たとえば、これに対処する方法の 1 つで、この railscast を確認してください: http://railscasts.com/episodes/360-facebook-authentication?view=asciicast。ただし、すべてのプロバイダー (twitter など) を個別に処理する必要があります。または、ブラウザで facebook の永続的な Cookie を見つけてクリアしてみてください (Facebook は永続的な Cookie を使用して「記憶」を実装していますが、私は専門家ではなく、調査する必要はありませんでした)。

私の唯一の他のコメントは、本番環境ではそのような動作が望ましいということです-それが同じOSユーザーであり、そのユーザーがtwitter/facebookなどで認証されたままである限り、アプリも同じユーザーであると想定します。ユーザーを変更する必要がある場合-OSでログアウト/ログインするか、このアプリ、Facebook、および「remember me」が設定されていてログアウトしていない他のすべてのWebサービスへのアクセスを次の人に許可します。自動テストの場合、Cookie (セッションと永続の両方) はテスト間で保持されないため、この問題はまったく発生しないはずです。

ただし、それが手動テストの問題になる可能性があることはわかります。ただし、手動は手動です。Facebook から手動でログアウトするだけで問題ありません。

これはすべて、あなたの説明に基づく私の推測です。したがって、保証はありませんが、少なくともある時点で役立つことを願っています.

于 2013-02-27T21:50:47.483 に答える
0

facebook では、 に設定することで再認証を強制するようにomniauth-facebook を構成できます。auth_typereauthenticate

于 2014-02-06T04:25:37.613 に答える