Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在RoR中搜索记录?_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何在RoR中搜索记录?

Ruby on rails 如何在RoR中搜索记录?,ruby-on-rails,Ruby On Rails,我知道我可以使用查询语言来查找我想要的记录。我正在做一个登录页面,我想找到与用户名和密码匹配的记录,但我不想循环所有元素来找到我想要的用户(),我应该在RoR中做什么,除了键入SQL。也许: User.first(:conditions => {:login => 'ted', :password => 'secret'}) # returns nil for no match and first match for a good record # make sure the

我知道我可以使用查询语言来查找我想要的记录。我正在做一个登录页面,我想找到与用户名和密码匹配的记录,但我不想循环所有元素来找到我想要的用户(),我应该在RoR中做什么,除了键入SQL。

也许:

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 
对于身份验证,我强烈建议()

也许:

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 

对于身份验证,我强烈建议()

您可以使用动态查找器按用户名和密码查找用户:

@user = User.find_by_user_name_and_password('scott', 'tiger')

您可以使用动态查找器按用户名和密码查找用户:

@user = User.find_by_user_name_and_password('scott', 'tiger')

虽然Sam和Chandra提供的其他答案在技术上是正确的,但这两种解决方案都暗示密码是以明文形式存储的——这是一个非常糟糕的想法。如果有人不应该访问你的数据库,他们将拥有一整套用户名(可能还有电子邮件地址),以及所有密码

请考虑使用一种算法来确保密码在数据库中被加密,例如BLIPT。你需要宝石才能使用它

你也应该考虑从查询中完全去掉密码。这是一种良好的做法,因为它提供了额外的安全级别;SQL注入变得更加难以执行。如果用户具有唯一的用户名,仅获取用户名应返回相同的对象,然后可以检查密码是否正确:

@user = User.find_by_username(params[:username])
if @user.password == params[:password]
  # do something
else
  # do something else
end

理想情况下,您应该使用bcrypt并在查询中省略密码。GitHub上的bcrypt ruby自述文件(我提供的链接)中描述了如何做到这一点。

虽然Sam和Chandra提供的其他答案在技术上是正确的,但这两种解决方案都暗示密码以纯文本形式存储——这是一个非常糟糕的想法。如果有人不应该访问你的数据库,他们将拥有一整套用户名(可能还有电子邮件地址),以及所有密码

请考虑使用一种算法来确保密码在数据库中被加密,例如BLIPT。你需要宝石才能使用它

你也应该考虑从查询中完全去掉密码。这是一种良好的做法,因为它提供了额外的安全级别;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很多。对于像我这样的初学者来说,似乎很难使用authlogic。。。我发现RoR有很多速记要做的事情,但我对它没有足够的了解。。。非常感谢。