新手问题 Devise 可以不要 email 吗?把别的设置为登录名称。

QueXuQ · 2013年06月01日 · 最后由 imlcl 回复于 2013年06月02日 · 4009 次阅读

http://cn.asciicasts.com/episodes/210-customizing-devise 根据上面这个地址说的,只要设置 config.authentication_keys = [ :username ]
就可以登录使用 username 了,问题是我直接不想要 email 这个字段,我删了,但是发现会报错,不知道怎么不使用 email 呢?官方文档上,没有看到。 不知道谁有经验呢。

别暴露给用户就行了

匿名 #3 2013年06月02日

可以,你不看文档么

devise 默认就是把 email 当作主键的,删了会有各种麻烦(比如会默认有很多针对 email 的 validation 会挂)。如果坚持要用 devise 的话,建议保留 email 字段,不用而已。

class User < ActiveRecord::Base def email_required? false end end

我的方法,user.rb 里面定义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],我试试各位说的几种方法看怎么样。

#9 楼 @QueXuQ 其实 sorcery 也挺好用的,我有好几个项目用了。如果 Hack 得比较麻烦,不如自己写一个了……就我个人而言,就让那个 email 字段放着那里吧,毕竟现在很多东西都要求记录 email,说不定某一天你又得要用了

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