如何在RoR中搜索记录?
问题描述:
我知道我可以使用查询语言来查找我想要的记录。我正在做一个登录页面,我想查找与用户名和密码相匹配的记录,但我不想循环所有元素来找出我想要的用户(< @ users.each do | user | %>),wt应该在RoR中做,除了键入SQL。如何在RoR中搜索记录?
答
您可以使用动态查找器通过user_name和密码来查找用户:
@user = User.find_by_user_name_and_password('scott', 'tiger')
答
而其他Sam和Chandra提供的答案在技术上是正确的,两种解决方案都意味着密码以纯文本格式存储 - 这就是一个非常想不好主意。如果有人不应该访问您的数据库,他们将拥有一组完整的用户名(以及可能的电子邮件地址)以及所有的密码。
相反,请考虑使用算法来确保您的密码在数据库中已加密,如bcrypt。您需要使用bcrypt-rub宝石。
您还应该考虑完全不考虑查询中的密码。这是一个很好的做法,因为它提供了额外的安全级别; SQL注入变得更难执行。如果用户有唯一的用户名,只是获取用户名应返回相同的对象,之后就可以检查密码是否正确:
@user = User.find_by_username(params[:username])
if @user.password == params[:password]
# do something
else
# do something else
end
理想情况下,你应该都使用bcrypt和查询离开了密码。如何做到这一点在GitHub上的bcrypt-ruby自述文件(我提供的链接)中有描述。
对于像我这样的初学者来说,似乎很难使用authlogic ......我发现RoR有很多简短的事情来做,但是我对它没有足够的理解...... thx很多。 – DNB5brims 2009-12-27 07:56:22