http://cn.asciicasts.com/episodes/210-customizing-devise 根据上面这个地址说的,只要设置 config.authentication_keys = [ :username ] 就可以登录使用 username 了,问题是我直接不想要 email 这个字段,我删了,但是发现会报错,不知道怎么不使用 email 呢?官方文档上,没有看到。 不知道谁有经验呢。
别暴露给用户就行了
https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-username-or-email-address
可以,你不看文档么
devise 默认就是把 email 当作主键的,删了会有各种麻烦(比如会默认有很多针对 email 的 validation 会挂)。如果坚持要用 devise 的话,建议保留 email 字段,不用而已。
class User < ActiveRecord::Base def email_required? false end end
我的方法,user.rb 里面定义find_for_authentication:
find_for_authentication
def self.find_for_authentication(conditions={}) User.find_by_name(conditions[:email]) end
#6 楼 @linjunhalida 赞!解决方法往往很简单啊
2 楼正解! @QueXuQ #7 楼 @zlx_star #6 楼 @linjunhalida
class User < ActiveRecord::Base protected def email_required? false end def self.find_first_by_auth_conditions(warden_conditions) conditions = warden_conditions.dup if login = conditions.delete(:badge) where(conditions).where(["lower(badge) = :value OR lower(email) = :value", { :value => login.downcase }]).first else where(conditions).first end end end
#8 楼 @ericguo #2 楼 @imlcl 这个看过了,我就是连 email 这个字段都不要了。 然后现在的解决办法,直接去掉 validation,然后authentication_keys: [:number],我试试各位说的几种方法看怎么样。
authentication_keys: [:number]
#9 楼 @QueXuQ 其实 sorcery 也挺好用的,我有好几个项目用了。如果 Hack 得比较麻烦,不如自己写一个了……就我个人而言,就让那个 email 字段放着那里吧,毕竟现在很多东西都要求记录 email,说不定某一天你又得要用了