2010-10-29 7 views
0

При вызове помощника _url в рельсах он будет возвращать хост + порт + путь так, напримерRails: удалить порт из _url помощника

photo_url 

вернется

http://localhost:3000/photo 

В моей среде у меня есть тонкий, обслуживающий приложение rails на данном порту, и apache, обслуживающий статический контент на другом порту. Когда сайт подключен без какого-либо порта, каждый сервер знает, какую часть обрабатывать, и все в порядке. Однако, если задан конкретный порт, только запрашиваемый сервер отправляет ответ (который ожидается).

У меня теперь возникают проблемы, потому что когда я аутентифицирую пользователя через oauth2 (facebook, twitter) или openid, мне нужно отправить URL-адрес обратного вызова. Используемый множитель (OmniAuth) использует помощник _url (насколько я могу судить) (callback_url) для вычисления URL-адреса обратного вызова. Это приводит к тому, что только тонкие ответы на дополнительные запросы из-за добавленного номера порта.

Есть ли способ сказать рельсы, что он не работает на каком-либо конкретном порту? Или что он не использует номер порта в помощнике _url?

ответ

0

Можете ли вы использовать photo_path вместо этого?

+0

Мне нужно было бы изменить драгоценный камень для этого, что не было бы хорошим решением. (Поведение жемчужины верное, это моя настройка странная) – Peter

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:3000 как full_url. Если к странице обращаются по адресу http://mysite.com/whatever, то full_url будет http://mysite.com. Таким образом, номер порта сервера thin, обслуживающий страницу , не должен присоединяться к URL-адресу, если только URL-адрес, используемый для доступа к странице, которая перенаправляет пользователя на обратный вызов, включает номер порта.

Обратите внимание, что, в случае необходимости, можно настроить OmniAuth использовать фиксированные full_host, установив OmniAuth.config.full_host к String или Proc, которая возвращает значение, которое вы хотите использовать.

+0

Ссылки для callback_url и full_host возвращаются 404. Не могли бы вы их обновить? –

+0

Обновлен путь full_host –

+0

Я думаю, нам также нужно будет переписать область. –

 Смежные вопросы

  • Нет связанных вопросов^_^