Многоузловое приложение с единым входом в домены в Rails? - PullRequest
6 голосов
/ 14 декабря 2011

Мне нужно разработать многосайтовое приложение с единым входом для разных доменов (что-то вроде аккаунта Google с несколькими службами Google, такими как gmail, docs, google +):

multi applications, multi domains, single sign on

  • Чтобы использовать детские сайты, пользователь должен зарегистрироваться на родительском сайте.
  • Каждый сайт имеет свою логику, кроме входа пользователя, баллов и счетов.
  • Из дочернего приложения я должен иметь возможность войти в глобальную учетную запись пользователя, потратить пользовательские баллы и сгенерировать счет для какой-либо услуги.
  • Форма регистрации, список счетов и панель для управления балламиДоступно только с родительского сайта / приложения.

Какова лучшая стратегия для реализации этого на Rails 3.1?Важны масштабируемость, производительность и безопасность.

  • Приложения с одним или несколькими рельсами?
  • Одна или несколько баз данных?
  • Глобальные сервисы в основном приложении или как отдельные приложения/ engine?
  • Как реализовать единый вход?Один идентификатор сеанса в БД или что-то вроде facebook oauth?
  • Как реализовать баллы расходов и генерировать счета-фактуры в результате запроса от дочернего сайта?

Ответы [ 2 ]

5 голосов
/ 14 декабря 2011

Вы должны иметь возможность реализовать это, используя OmniAuth с несколькими (и независимыми) приложениями Rails. Это будет интересно:

Сообщение в блоге на эту тему: http://blog.joshsoftware.com/2010/12/16/multiple-applications-with-devise-omniauth-and-single-sign-on/

0 голосов
/ 14 декабря 2011

Допустим, вы создали модель User в главном приложении и перенесли ее. Тогда вам нужно получить доступ к этой базе данных из других приложений. Это не проблема . Сначала вам нужно добавить определение соединения с базой данных основного приложения в config/database.yml дочернего приложения, например:

parent_connection:
  adapter: your_adapter_here
  host: your_host_here
  username: username
  password: password
  database: main_application_production

Затем вы создаете модель с именем User, но , а не с помощью scaffolder или sth. как это. Просто создайте файл вручную следующим образом:

class User < ActiveRecord::Base
     establish_connection :parent_connection # This uses the specified connection
end

В случае по умолчанию выбрано соединение, которое соответствует названию среды. Вам нужно только указать варианты. Теперь вы можете получить доступ к классу User, как в основном приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...