新手问题 关于 devise 的一个小问题

cqcn1991 · 2013年01月26日 · 最后由 cqcn1991 回复于 2013年01月26日 · 2531 次阅读

具体是 devise wiki 里面的一个 How to https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-username-or-email-address

这个教程里面,直接就给 User Model 添加了 username 但是并没有额外的 validation 和处理

接下来,在下面重写 find_for_database_authentication method 时 有

def self.find_first_by_auth_conditions(warden_conditions)
         conditions = warden_conditions.dup
          if login = conditions.delete(:login)
            where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first
      else
            where(conditions).first
      end
end

就是这一行有疑惑,where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first lower(username) 应该是把 username 也给小写了。但是之前并没有类似|user| user.username = username.downcase 这种保存

也就是实际上漏掉了“要把 username 也小写化”这一步?

另外……请问怎么发成 code 格式,我尝试用'但是没效果……

lower() 是数据库内的函数。

#1 楼 @Rei 不是很理解。请教 Rei 大哥是否可以说清楚 我的意思是,会不会出现这种情: 用户可以注册 2 个 ID,一个 Rei 和 rei,但是登陆的时候,代码中校核的都是 rei 的 ID 另外,上面添加 username 的时候,也没有校验 uniqueness 额,实际上可以出现好几个 rei?

我看了看 devise 源码,好像没给 email 的校验加上 case_sensitive,username 我也不知道加没加,这样就有可能冲突,你可以自己试一试。

写入的时候做好模型校验,查询的时候就不怕冲突,不过也有小几率并发绕过了模型校验(比如同时注册 Rei),可忽略。

#3 楼 @Rei Thx,我就是新手真的搞这个没啥自信,Rei 大好几次回答我问题了,头像又帅……(好吧其实我是男的),太感谢你了 email 应该是写了的,在 config devise 的 initializer 中有写到,应该在本身的 code 中也会体现。看 wiki 的时候作者说了,只建议 overwrite 不建议去 bend devise

需要 登录 后方可回复, 如果你还没有账号请 注册新账号