Похоже, что до сих пор не было опубликовано решение исходного вопроса.
У меня была похожая проблема. У меня было несколько рельсовых приложений, и мне нужно было иметь возможность отслеживать пользователей между действиями на всех из них. Итак, я хотел иметь одно приложение для управления пользователями и отслеживания, и все другие приложения будут подключаться к этой базе данных пользователей для аутентификации.
Я уже использовал Authlogic для некоторых других проектов, поэтому я надеялся, что это будет так же просто, как изменить некоторые параметры конфигурации.
Вот мое решение:
Я создал основное приложение для отслеживания пользователей. В приложении не было ничего особенного. Это позволило пользователям регистрироваться, входить в систему, выходить из системы и т. Д. После входа в систему пользователи могут переходить к другим приложениям.
В файле environment.rb моего пользовательского приложения и каждого приложения, нуждающегося в аутентификации с базовым приложением, необходимо настроить ключ сеанса и домен таким же.
config.action_controller.session = {
:session_key => '_my_app_session',
:secret => '_long_secret_session_key_here',
:domain => ".basedomain.com"
}
Каждое из моих приложений находится под своим собственным поддоменом, таким как app1.basedomain.com app2.basedomain.com
Я не уверен, будет ли это работать иначе без каких-либо изменений.
В каждом приложении создайте сеанс пользователя
class UserSession < Authlogic::Session::Base
end
и пользовательские модели.
class User < ActiveRecord::Base
establish_connection "users_database"
acts_as_authentic
end
Что отличается в этой модели пользователя тем, что теперь у нее есть метод установления соединения. «users_database» находится в файле database.yml и указывает на базу данных для центрального приложения управления пользователями.
Я не заходил так далеко, чтобы входить и выходить из моих под-приложений, но если бы вы это делали, вам также пришлось бы создавать UserSessionsController.
В каждом приложении, которое использует аутентификацию, я включил несколько вспомогательных методов в ApplicationController, например,
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end
def require_user
unless current_user
store_location
redirect_to 'http://main_user_login_page'
return false
end
end
Затем я могу использовать 'require_user' в моих контроллерах, где я хочу аутентификацию, как и в моем основном пользовательском приложении.
Надеюсь, это поможет.
Чейз М Грей