我知道我可以使用查询语言来查找我想要的记录。我正在做一个登录页面,我想找到与用户名和密码匹配的记录,但我不想循环所有元素来找出我想要的用户(<%@ users.each do | user |%>),除了输入SQL,我应该在RoR中执行wt。
答案 0 :(得分:3)
或许:
User.first(:conditions => {:login => 'ted', :password => 'secret'})
# returns nil for no match and first match for a good record
# make sure there is a unique index on login
答案 1 :(得分:3)
您可以使用动态查找程序按用户名和密码查找用户:
@user = User.find_by_user_name_and_password('scott', 'tiger')
答案 2 :(得分:0)
虽然Sam和Chandra提供的其他答案在技术上是正确的,但两种解决方案都暗示密码以纯文本形式存储 - 这是非常坏主意。如果有人不能访问您的数据库,他们将拥有一整套用户名(以及可能的电子邮件地址),以及所有密码。
相反,请考虑使用算法确保您的密码在数据库中加密,例如bcrypt。你需要bcrypt-rub gem才能使用它。
您还应该考虑完全忽略查询中的密码。这是一种很好的做法,因为它提供了额外的安全性; SQL注入变得更难执行。如果用户具有唯一的用户名,则只需提取用户名即可返回相同的对象,之后您可以检查密码是否正确:
@user = User.find_by_username(params[:username])
if @user.password == params[:password]
# do something
else
# do something else
end
理想情况下,您应该使用bcrypt并从查询中省略密码。如何执行此操作在GitHub上的bcrypt-ruby自述文件(我提供的链接)中有所描述。