2

www.example.comのコントローラーに設定され、client.example.comで読み取られてレンダリングされるflash [:notice]メッセージを設定することは可能ですか?

この特定の例では、www.example.comとclient.example.comは同じRails3.2アプリケーションにあります。

ユーザーはwww.example.com/signupからアクセスし、フォームに入力してから、新しく作成されたサブドメインclient.example.comにリダイレクトされます。

あなたは次のようなことをすることができますか?

flash[:notice] = "hello world", domain: "*.example.com"
4

3 に答える 3

4

セッションをすべてのサブドメインで共有できるようにする必要があります。オプションを開いconfig/initializers/session_store.rbて追加し:domain => :allます。

Yourapp::Application.config.session_store :cookie_store, key: '_yourapp_session', :domain => :all
于 2012-09-10T21:40:14.087 に答える
2

Flashは、これをそのままではサポートしていません。このようなことをしたい場合は、ドメインにCookieを設定してから、サブドメインからCookieを取得する必要があります。

サブドメインでアクセスできるように、Cookieのドメインを設定する必要があります。これは、環境ファイルまたは初期化子をさらに適切に配置できる例です!:

Rails.application.config.session_store :cookie_store, :key => '_my_key', :domain => ".yourdomain.com"
于 2012-09-10T21:39:36.163 に答える
1

サブドメイン間で共有可能なセッションを必要としない解決策は、メッセージをリクエストパラメータとして送信することです。

# application_controller.rb

class ApplicationController
  before_action :handle_cross_domain_flash_messages

  def handle_cross_domain_flash_messages
    flash.alert = params[:alert] if params[:alert]
    flash.notice = params[:notice] if params[:notice]
  end
end

:alertこれで、またはparamsを使用して任意のパスを使用して:notice、フラッシュメッセージを設定できます。

# example path
'/?alert=Hello+World'

# example controller
class PagesController
  def redirect_with_message
    redirect_to root_path(notice: 'Hello world')
  end
end

ただし、これを行うと、ブラウザのアドレスバーにパラメータが残ります。個人的には、アドレスバーの超長いアドレスは好きではありません。目的のフラッシュメッセージを取得しながらアドレスバーからパラメータを削除する方法は、リダイレクトすることです。

# application_controller.rb

class ApplicationController
  before_action :handle_cross_domain_flash_messages

  def handle_cross_domain_flash_messages
    return unless params[:alert] || params[:notice]
    redirect_to request.path, alert: params[:alert], notice: params[:notice]
  end
end

ステップバイステップの説明:

  1. 3番目のコードブロックからのコントローラーアクションは、にリダイレクトし'/?notice=Hello+world'ます。

  2. handle_cross_domain_flash_messages、フラッシュメッセージがパラメータを通過したことを確認し、別のリダイレクトを引き起こし、与えられたフラッシュメッセージを渡します。

  3. リダイレクトは'/'、ブラウザのクリーンパスである今に移動します。フラッシュメッセージはページにあります。

追加のリダイレクトが必要でしたが、グローバルセッションは使用されませんでした。

于 2017-03-02T22:03:17.973 に答える