我有一个典型的用户模型(带有用户名、电子邮件和密码字段),它具有多个电话模型的has_one 客户端模型。
我想要做的是允许用户使用电子邮件+密码、用户名+密码或电话号码+密码之一的组合登录。
我怎样才能使用设计实现这一点?
我有一个典型的用户模型(带有用户名、电子邮件和密码字段),它具有多个电话模型的has_one 客户端模型。
我想要做的是允许用户使用电子邮件+密码、用户名+密码或电话号码+密码之一的组合登录。
我怎样才能使用设计实现这一点?
为了实现这一点,我必须将以下内容添加到我的用户模型中:
attr_accessor :login
private
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
match = where(conditions).where(
["lower(email) = :login OR lower(username) = :login",
{ login: login.downcase }]).first
unless match
match = joins(client: :phones).where(conditions).where(
["lower(client_phones.number) = :phone",
{ phone: PhoneFormatter.parse(login) }]).first
end
find(match.id) if match
else
where(conditions).first
end
end