Ich verwende Authlogic, um die Authentifizierung für meine Rails-App durchzuführen. Meine Benutzer melden sich bei einer Sub-Domain an, die als Teil eines Client-Modells gespeichert ist. Benutzer gehören zu Clients und Clients authenticate_many UserSessions. Anmelden funktioniert einwandfrei; Das Problem, das ich habe, besteht darin, dass sich Benutzer in jeder Subdomain anmelden können, unabhängig davon, ob sie zum Subdomain-Client gehören oder nicht. Hier ist mein Code:Wie kann ich sicherstellen, dass Benutzer mit Authlogic zu einem bestimmten Modell gehören?
Application Controller:
class ApplicationController < ActionController::Base
helper_method :current_user_session, :current_user, :current_client
private
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.user
end
def current_client
subdomain = request.subdomain
if subdomain.present? && subdomain != 'www'
@current_client = Client.find_by_subdomain(subdomain)
else
@current_client = nil
end
end
end
UserSessions Controller:
class UserSessionsController < ApplicationController
def new
@user_session = current_client.user_sessions.new
end
def create
params[:user_session][:client] = current_client
@user_session = current_client.user_sessions.new(params[:user_session])
if @user_session.save
redirect_to dashboard_path
else
render :action => 'new'
end
end
end
Client-Modell:
class Client < ActiveRecord::Base
authenticates_many :user_sessions, :find_options => { :limit => 1 }
has_many :users, :uniq => true
end
User und Usersession Modelle:
class User < ActiveRecord::Base
belongs_to :client
acts_as_authentic do |c|
c.validations_scope = :client_id
end
end
class UserSession < Authlogic::Session::Base
end
Ich verwende Rails 3 auf Mac OS X mit der neuesten Version von Authlogic installiert. Jede Hilfe würde sehr geschätzt werden!
Vielen Dank! Ich wusste, dass es so etwas sein musste. – mjaz