Rails身份验证从头开始

时间:2015-12-15 10:38:27

标签: ruby-on-rails authentication

实际上我是rails的新手我试图从头开始构建身份验证但是没有任何想法。所以我在互联网上阅读了一些代码,我对一个功能感到惊讶。那是什么!!意味着在这里。它首先是假的吗?它是什么以及为什么我们使用它?

def logged_in?
  !!current_user
end

3 个答案:

答案 0 :(得分:0)

我们使用double bang来获取布尔值(true / false)。这是演示:

2.1.2 :001 > my_var = "string"
 => "string" 
2.1.2 :002 > !my_var
 => false 
2.1.2 :003 > !!my_var
 => true

2.1.2 :005 > null_var = nil
 => nil 
2.1.2 :006 > !!null_var
 => false 

所以,正如你所看到的那样,如果我们想获得一个对象的相应布尔值,那么我们使用双重爆炸(!!)。

在您的情况下,我认为current_user可以有user个对象或nil值。它没有获取user对象或nil,而是使用!!将其转换为相应的布尔值。

希望它有所帮助。快乐学习!

修改 我想补充一点,在Ruby中,以?结尾的方法名称将返回布尔值。所以,您提到的代码我们使用!!中的logged_in?来返回布尔值而不是UserNULL类对象。

答案 1 :(得分:0)

!表示“not”,因此!!表示“not-not”。 !通常被称为“爆炸”(因为“感叹号”太长,我假设)因此!!通常被称为“双重爆炸”。另请参阅“hashbang”或“shebang”,表示#!

它具有将所有“truthy”*事物转换为布尔true和所有“虚假”事物到布尔false中的效果。

请注意,在Ruby中,与某些语言不同,“麻痹”的唯一内容是falsenil。 0,“”,[],{}以及任何其他非false或nil的对象,例如User对象,都是“真实的”。

*“truthy”表示它将通过“if”测试。

答案 2 :(得分:0)

你正试图做这样的事情

def logged_in?
  current_user

你在这里询问它是否是当前用户

def logged_in?
  !current_user

虽然你在这里问的是登录用户不是current_user。