Herokuにカスタム ドメイン (mywebsite.com など) を使用して HTTP 経由で提供される Web サイトがあります。
ユーザーがログインしたいときは、HTTPS 経由で Heroku アプリケーションの非カスタム URL にリダイレクトします (私は安価でSSL エンドポイントに支払いたくないため、Piggyback SSLを使用します)。
次に、ユーザーがログインした後、トラフィックを暗号化する必要がなくなったため、ユーザーをカスタム ドメインにリダイレクトします。
flash[:notice]
唯一の問題は、それらをリダイレクトする前に、 ( sinatra-flashを使用して) を使用してメッセージ (たとえば、「ログインに成功しました!」) を表示することです。しかし、ユーザーはこのプロセスであるドメインから別のドメインに移動するため、同じサーバー上にいるにもかかわらず、ドメイン X からのセッション データにドメイン Y からアクセスできないため、メッセージが表示されないと思います。
- 問題に対する私の理解は正しいですか?
- それを修正する正しい方法は何ですか?
2012 年 10 月 12 日の更新:
だから、私が最終的に行った解決策は少しハッキーです:
まず、レコードごとにランダムな文字列を含むフィールドをOneTimeFlash
持つ新しいデータ モデル を追加しました。token
次に、ユーザーがドメイン X にログインした後、新しいインスタンスを作成OneTimeFlash
し、クエリ文字列のトークンを使用してドメイン Y にリダイレクトするようにしました。
# The model automatically generates a token before being created.
one_time_flash = OneTimeFlash.create(:message => "You've successfully logged in!")
redirect "#{DOMAIN_Y}/flash/#{one_time_flash.token}"
次に、サーバーがリクエストでこのトークンを検出すると、フラッシュが表示されます。
get "/flash/:token" do |token|
one_time_flash = OneTimeFlash.first(:token => token)
flash[:notice] = one_time_flash.message unless one_time_flash.nil?
one_time_flash.destroy
redirect "/
end
(誰かが混乱した場合に備えて、ORM はDataMapperです。)
私が言ったように:それはハッキーですが、うまくいきます。このアプローチで深刻な問題を考えられる人はいますか?