4

Authlogic でセッションを作成するときに、Cookie ドメインを現在のドメイン以外に設定することはできますか?

サインアップ ドメインから新しいアカウントが作成されたら、ユーザーをサブドメイン アカウントにリダイレクトし、ユーザーをログインさせたいと思います。

現在のコントローラ:

def create
  @account = Account.new(params[:account])
  if @account.save
    @user_session = @account.user_sessions.create(@account.users.first)
    # I'd like the cookie domain to be [@account.subdomain, APP_CONFIG[:domain]].join(".")
    redirect_to admin_root_url(:host => [@account.subdomain, APP_CONFIG[:domain]].join("."))
  else
    render 'new'
  end
end
4

3 に答える 3

4

もしあなたがそうするなら:

config.action_controller.session[:domain] = '.YOURDOMAIN.COM'

これにより、すべてのユーザーがサブドメインのすべてのサブドメインにログインできるようになります。次に、コントローラーのものを表示する前に、誰かが実際に正しいドメインを使用していることを確認するフィルターを追加すると (または何でも、私はフィルターを使用しているので、それが機能することがわかっています)、それはかなりうまく機能します。

例として、セッションの適切なサブドメインをセッション変数として保存し、ユーザーがメイン ドメインにいる場合、または他のユーザーのサブドメインのページを見ている場合に、特定のものへのリンク オプションを提供できます。

これは、この種のことを行うための一般的なパターンのようです。サブドメインに固有の Cookie を設定すると、そうしないと、メイン サイトにいつログインしたかを知ることができなくなります。また、users_domain?これを行うとビューで時折呼び出される ' ' ヘルパーもあります。

このような一般的な Web デザイン パターンを使いたくない場合は、wesgarrion の単独使用 -> サブドメインでのセッション作成も有効です。これを設計/相互作用/コードの問題として言及したいと思いました。

于 2010-02-04T20:40:22.663 に答える
0

サブドメインにログインする場合は、Authlogic の使い捨てトークンを使用できます。

使い捨てトークンを使用したログインの例については、 Params モジュールを確認してください。

当然、あなたのアクションはそれらをログインさせ、(サブドメインで) セッションを作成するので、次のリクエストのために再認証する必要はありません。

process_cgi()session()で Cookie のドメインを設定するオプションがあります、Authlogic でそれらをリクエストごとに設定する方法がわかりません。ただし、authlogic メーリング リストは非常に反応がよく、これはかなり標準的な使用例のように思えます。えーと、Google グループであなたのメモを見たので、気にしないでください。

于 2010-01-17T01:50:47.730 に答える
0

複数のサブドメインを持つアプリケーションがあり、それらの間でセッション Cookie を共有したくない場合、またはさらに悪いことに、同じ session_key を持つトップレベルの .domain セッション Cookie をサブドメイン セッション Cookie と一緒に使用します (Rails は 1 つを保持し、もう一方を投げます-単にリクエストヘッダーの順序に基づいていると思います)-ディスパッチャーフックを使用して、セッションCookieをサブドメインに強制できます。

拡張機能から ActionController にフックを含めます。

base.send :after_dispatch, :force_session_cookies_to_subdomains

このドメインを after_dispatch フックに設定します。

@env['rack.session.options'] = @env['rack.session.options'].merge(:domain => 'my_sub_domain' end)

私たちにとっては、@env[HTTP_HOST] を調べて、[my_sub_domain] がどうあるべきかを判断します。

このアプローチでは、ブラウザがサブドメインの Cookie を受け入れるために、ユーザーのログインはサブドメインで行われる必要があります (Authlogic Params のようなパターンを使用してサブドメインに対する次のリクエストに伝播する場合を除く)。

注: ブラウザーは、要求が上位レベルのドメインから来る場合、サブドメインの Cookie を拒否します。私たちにとって、これは悪いことではありません。トップレベルのセッション Cookie が作成されず、後でサブドメインに送信されないという、私たちが必要とするのと同じ結果になります。

同様の目的への別のアプローチは、サブドメインからのものではない場合、Cookie を強制的に設定しないようにすることです。あまり時間をかけずに、これを達成できた方法は -

request.env["rack.session"] = ActionController::Session::AbstractStore::SessionHash.new(self, request.env)

ApplicationController の after フィルターで。

于 2010-03-01T20:09:12.830 に答える