1

Rails アプリは現在 example.org で利用できますが、example.comに切り替えたいと考えています。

ワイルドカード 301 リダイレクトを実行しroutes.rbても問題はありませんが、ユーザー セッションも保持したいと考えています。新しいドメインは古いドメインの Cookie にアクセスできないため、ユーザーを新しいドメインにリダイレクトし、サインインしたままにするための最善の (安全でできるだけ簡単な) 方法は何ですか?

複雑な認証トークン メソッドを使用してクロスドメイン Web アプリをセットアップすることについて話しているスレッドを多数見つけましたが、1 回限りの一方向の移行を探しているので、ソリューションがより簡単になることを願っています。

助言がありますか?

Ruby on Rails 3、OmniAuth を使用し、デフォルトの「cookie_store」をセッション ストアとして使用しています。

4

1 に答える 1

2

認証トークンを含む電子メール リンクを送信する場合と同じ方法で行うことができます。Cookie が正しいことを確認し、正しいexample.org場合は次の場所にリダイレクトします。

http://example.com?token=<their token>

次に、トークンが到着時にDBにあるトークンと一致することを確認します。example.comトークンが一致する場合は、ドメインのセッション Cookie を作成してから、データベース内のトークンを変更します。

これにより、あるドメインから別のドメインに正常に転送され、新しいドメインで (Cookie を介して) 永続的なログインが提供され、DB 内の認証トークンを変更することで背後のドアが閉じられます。

編集

以下の質問に答えるために、ミドルウェアや凝ったものは必要ないと思います。example.org のアプリケーション コントローラで次のような単純な before フィルタを実行できます。

before_filter :redirect_to_dot_com
...
def redirect_to_dot_com
  url = "http://example.com" + request.fullpath
  url= destination + (url.include?('?') ? '&' : '?') + "token=#{current_user.token}" if signed_in?
  redirect_to url, status: 301
end

これにより、ユーザーはいずれかの方法でリダイレクトされ、ユーザーが .org サイトにサインインしている場合はトークンがクエリに追加されます。

于 2013-10-30T22:46:01.153 に答える