1

Rails で _url ヘルパーを呼び出すと、ホスト + ポート + パスが返されるため、たとえば

photo_url

戻ります

http://localhost:3000/photo

私の実稼働環境では、特定のポートでレール アプリケーションをシン サービスし、別のポートで静的コンテンツを提供する apache を使用しています。ポートなしでサイトにアクセスすると、各サーバーは処理する部分を認識し、すべて問題ありません。ただし、特定のポートが指定されている場合は、要求されたサーバーのみが応答を送信します (これは予期されることです)。

oauth2(facebook、twitter)またはopenidを介してユーザーを認証するときに、コールバックURLを送信する必要があるため、現在問題が発生しています。私が使用する宝石 (OmniAuth) は、_url ヘルパー (私が知る限り) (callback_url) を使用して、コールバック URL を計算します。ポート番号が追加されているため、それ以降のリクエストには薄い応答しかありません。

特定のポートで実行されていないことをレールに伝える方法はありますか? それとも、_url ヘルパーでポート番号を使用していませんか?

4

2 に答える 2

1

OmniAuth はヘルパーを使用しませrequest.urlが、自分で構成を提供しない限り、解析して完全なパスを計算する独自のメソッドを使用します。

OmniAuth のcallback_url:

def callback_url
  full_host + callback_path
end

OmniAuth のfull_host:

def full_host
  case OmniAuth.config.full_host
    when String
      OmniAuth.config.full_host
    when Proc
      OmniAuth.config.full_host.call(env)
    else
      uri = URI.parse(request.url)
      uri.path = ''
      uri.query = nil
      uri.to_s
  end
end

そのため、 のページにアクセスするとhttp://localhost:3000/whatever、OmniAuth は として使用http://localhost:3000full_urlます。ページが でアクセスされた場合http://mysite.com/whatever、 はfull_urlになりますhttp://mysite.com。したがって、ユーザーをコールバックにリダイレクトするページへのアクセスに使用される URL にポート番号が含まれていない限り、thinページを提供するサーバーのポート番号を URL に追加しないでください。

必要に応じて、OmniAuth をfull_host設定OmniAuth.config.full_hostして、使用したい値を返すStringまたはに固定して使用できることに注意してください。Proc

于 2011-02-26T23:05:46.310 に答える
0

代わりに photo_path を使用できますか?

于 2010-10-29T11:54:55.547 に答える