Gem Devise 如何调整 sign_up 的字段?

davidwei · 2012年02月10日 · 最后由 stephen 回复于 2013年03月24日 · 4697 次阅读

我想将 devise 注册用户时默认的的 email 字段,更换成其他的字段,比如:username,请问是不是需要覆写 RegistrationController 的 Create 方法?谢谢

没做过这种事,email 是 hard code,通常做法应该不太可行,我倒是觉得自己改一下 gem 更简单。 另外,devise 适合从零开始做的项目,如果是遗留系统,干脆抛开 devise 可能更好

修改 config/initialize/devise.rb 文件

找到 config.authentication_keys = [ :email ]

修改成

config.authentication_keys = [ :username ]

#2 楼 @zhex 这个只是修改认证的字段,如果用户注册还是得用邮箱,如@fsword 所言。纠结...

你看 Ruby China 的源代码是怎么弄的吧 2 楼说的没错,就是怎么改的。

#4 楼 @huacnlee 刚才瞅了下。ruby-china 注册依然用的是 login+email 的形式,登录的话,用的是

def self.find_for_database_authentication(conditions)
   login = conditions.delete(:login)
   self.where(:login => /^#{login}$/i).first
end

你不就是想用 username 字段来登陆么?

#6 楼 @huacnlee 哈哈。我想注册都用它的,email 字段不用。

@DavidWei 注册不用 email 还真少见, 这样 devise 的很多功能都用不到了。你自己写一个新的登陆机制应该比修改 devise 方便。

#8 楼 @zhex 在用户注册后,邮箱是和用户名一致的,也就是用户名 david 在系统中会有一个 david@example.com 的邮箱。邮箱功能是照用的。

@DavidWei 那也许你可以尝试在 validation 前就自动把 email 的地址补齐,你的 username 是唯一的,所以 email 也会是唯一的

这个问题已经有官方 HowTo了。

想要完全放弃 email 就要把 email 的 validations 都去掉 email_required? 好像也要 return false 在建立 user 的时候用 username 自动补全比较靠谱

@DavidWei 这个问题最后你是如何解决的?

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