2011-08-19 14 views
6

У меня есть сайт, построенный кем-то другим с рубинами на рельсах, и теперь я создаю приложение django.Интегрируйте django и RoR (рубин на рельсах)

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

Пользователи не должны знать, что они «оставляют» приложение django - для них - его один сайт - это приложение RoR выглядит и выглядит одинаково для них.

А. Как я могу это сделать?
B. Они вписываются в приложение django, поэтому сеансы и все пользовательские материалы будут управляться django. Как я могу «пропустить» сеансы в приложении RoR? Должен ли я использовать iframe ??
C. Как выглядят ссылки в django на RoR-url?

Спасибо, ребята!

ответ

2

Лучшей практикой здесь будет просмотр того, как рекламные сети обмениваются данными по нескольким свойствам. Одним из обычно используемых методов является пиксель отслеживания. Например, в вашем приложении Django встроить:

<img src="http://myrailsapp/mysession_creator" /> 

Убедитесь, что ваше приложение-рельсы отвечает на этот адрес сеансом. Это установит cookie сеанса в домене rails.

Теперь на уровень безопасности, и это зависит от того, какой уровень безопасности вам нужен. Вы можете передать информацию, например:

<img src="http://myrailsapp/mysession_creator?user=myUserName" /> 

Очевидно, что это не невероятно безопасно, но это зависит от вашего приложения. Более безопасный метод будет: (. Либо через состояние базы данных или вызов приложения на стороне сервера)

<img src="http://myrailsapp/mysession_creator?t=<MD5HashTokenHere>" /> 

Затем Rails приложение будет иметь механизм проверки, что маркер против стороны сервера приложений Django больше работы, но больше безопасный.

Другой метод, если ваши приложения совместно используют корневой домен, вы можете использовать безопасный файл cookie в корневом домене для передачи информации между приложениями. Например, https://django.myapp.com устанавливает файл cookie myapp.com, и https://rails.myapp.com знает, как искать cookie «username». Требуется сертификат SSL подстановки в корневом домене.

Другой вариант - передать информацию о токенах или входах по каждой ссылке в приложение Rails и иметь before_filter, который распознает передачу и устанавливает сеанс аналогичным образом.

+0

Ваше первое решение отлично работает! Намного легче, чем я ожидал. Благодаря!!! Я хочу прокомментировать другие читатели, хотя может быть и очевидным, что я понял, что есть проблема с этим вызовом , поскольку он может быть использован в любое время кем-либо, чтобы начать новый сеанс в приложении rails без пароля! Поэтому добавление параметра t (MD5HashTokenHere) необходимо с новым и ограниченным по времени токеном. Еще раз спасибо @ Джошуа - ты спас меня! – reakh

0

Я не уверен, что это сработает, но мы сделали это, прежде чем использовать 2 рельсовых приложения.

Убедитесь, что ключи сеанса в Rails и вашем приложении django одинаковы.

В Rails, это будет, вероятно, выглядеть следующим образом:

ActionController::Base.session = { 
    :key   => '_my_session_key', 
    :secret  => '_my_session_secret' 
} 

В Django, быстрый Google привел меня к этому:

https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-SECRET_KEY

Я думаю, что когда-то те же, два приложения будут использовать один и тот же сеанс.

+0

Пат, я считаю, что Rails и Django имеют разные форматы и протоколы сеансов, поэтому они не могут совместно использовать сеансы (например, два приложения Rails могут быть способны). – Joshua

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