Обзор электронной почты на поддомен в разработке рельсов - PullRequest
6 голосов
/ 12 июня 2011

Я использую devise для аутентификации в приложении rails, и у моего приложения может быть много поддоменов.В настоящее время он использует электронную почту в качестве аутентификации, и электронная почта должна быть уникальной для всего приложения.

Теперь есть ли способ, которым я могу указать уникальность адреса электронной почты в поддомене, а не в приложении?Я попробовал:

validates_uniqueness_of :email, :scope => :account_id

Но не сработало.При регистрации нового пользователя он по-прежнему ищет уникальность электронной почты для всего приложения, а не для конкретного субдомена.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

7 голосов
/ 16 июня 2011

Хорошо, я так и сделал.Отредактировал config.authentication_keys в devise.rb как

config.authentication_keys = [ :login, :account_id ]

Также я создал скрытое поле для включения account_id в форму входа

<%= f.hidden_field :account_id, :value => @account.id %>

Здесь @account содержит учетную запись, связанную с текущим поддоменом.

И добавил следующий защищенный метод в user.rb, чтобы переопределить метод класса find_for_database_authentication

protected
def self.find_for_database_authentication(warden_conditions)
conditions = warden_conditions.dup
login = conditions.delete(:login)
account_id = conditions.delete(:account_id)
where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).where("account_id = ?", account_id).first
end 

Если есть лучшее решение, не стесняйтесь комментировать, ребята ..Ура!

0 голосов
/ 13 июня 2011

Как вы сохраняете своих пользователей, настраиваете ли вы учетную запись для модели пользователя, прежде чем пытаться ее сохранить? Если нет, то вы будете использовать значение account_id для nil - следовательно, будет выглядеть, что области нет.

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