新手问题 [已解决] Devise 怎样设置只要用户名就能注册 (而不是默认的 email)?

chairy11 · September 19, 2014 · Last by xfstart07 replied at September 20, 2014 · 2955 hits

问题

折腾好久了…… 能改的设置都改了,但注册的时候还是非要邮箱,如果不提供邮箱就无法注册…… 但我希望是只要用户名密码就能注册成功的,为什么就是不行呢?

我改的设置: 1.在#application_controller.rb

before_action :configure_permitted_parameters, if: :devise_controller?

protect
def configure_permitted_parameters
   devise_parameter_sanitizer.for(:sign_up) << :username
   devise_parameter_sanitizer.for(:sign_up) << :realname
end

2.把 migration 里的 email 项的 null: false, default: ""删除

3.#config/initializer/devise.rb 里

config.authentication_keys = [ :username ]
config.case_insensitive_keys = [ :username ]
config.strip_whitespace_keys = [ :username ]
config.confirmation_keys = [ :username]
config.reset_password_keys = [ :username ]

4.在 #model/user.rb 里

devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable,
         :validatable, :authentication_keys => [:username]

解决方案

#model/user.rb 里添加方法:

def email_required?
    false
end

在 model 里面的 devise 加 :authentication_keys => [:username]

添加方法

def email_required?
false
end

#1 楼 @xfstart07 太酷了!搞定了!谢谢:) 这什么原理啊?devise 源码中有 email_required?这个方法然后我们把它 overwrite 啦?

覆盖了 devise 的 validatable

# File 'lib/devise/models/validatable.rb', line 57

def email_required?
  true
end

http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Validatable#email_required%3F-instance_method

或许可以去掉 devise 的 validatable

#3 楼 @xfstart07 哦,好厉害,我之前还从来没有想过要去看 gem 内部怎么写……

@chairy11 我也是查了 stackoverflow 才知道...

You need to Sign in before reply, if you don't have an account, please Sign up first.