单个字段的多种身份验证形式

时间:2012-05-17 12:00:12

标签: ruby-on-rails ruby

我目前有一个rails项目,可以让客户以两种不同的方式验证他们的帐户。他们可以使用他们存储在数据库中的条形码,也可以使用电话号码。我想合并这两个字段,以便有一个字段允许两个身份验证源。这是我的两个字段的代码。

def User.authenticate(barcode)
  if user = find_by_barcode(barcode)
    user
  end
end

def User.authenticate2(phone_number)
  if user = find_by_phone_number(phone_number)
    user
  end
end

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:2)

我建议使用这个来简化代码:

def User.authenticate(barcode_or_phone_number)
  find_by_barcode(barcode_or_phone_number) || find_by_phone_number(barcode_or_phone_number)
end

但是它可能会导致查询2个sql。所以你可以考虑这个:

def User.authenticate(barcode_or_phone_number)
  where("users.barcode = ? OR users.phone_number = ?", barcode_or_phone_number, barcode_or_phone_number).first
end