如何解决在设计轨道中将电子邮件限定到子域
| 我在Rails应用程序中使用devise进行身份验证,并且我的应用程序可以具有许多子域。 目前,它使用电子邮件作为身份验证,并且电子邮件对于整个应用程序应该是唯一的。 现在有什么方法可以将电子邮件地址的唯一性限定在子域中,而不是整个应用程序中? 我试过了:validates_uniqueness_of :email,:scope => :account_id
但是没有用。在注册新用户时,它仍然寻求整个应用程序而不是特定子域的电子邮件的唯一性。
任何帮助将不胜感激。
解决方法
好吧,我这样做了。
在devise.rb中将config.authentication_keys编辑为
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
如果有更好的解决方案,请随时发表评论。
干杯!
, 您如何保存用户,是否在尝试保存之前在用户模型上设置了帐户?如果不是,那么您将范围限定为nil的account_id-因此看起来好像没有作用域。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。