example : login_name 代替email作为登录名
1, 首先,devise默认使用的是email作为登陆名字。
我们 需要在数据库里添加一个字段为login_name
rails g migration AddLoginNameToUser login_name:string
rake db:migrate
2, 接下来,我们需要修改devise的配置文件
/config/initializers/devise.rb里找到 # config.authentication_keys = [:email]
去掉注释,修改email为你的登陆名字段
config.authentication_keys = [:login_name]
3. 我们告诉了验证的字段是login_name,那么,需要在登陆页面修改对应的登陆字段 (以及其他页面对应的登陆字段)
<%= f.textl_field :login_name, autofocus: true %>
注意: 此处修改时,需将f.email_field修改为f.text_field,否则前端验证不能通过。
config.strip_whitespace_keys = [:login_name] => 这个是去除前后的空格.
config.password_length = 8..72 => 修改密码长度
4 更新时碰到过一个问题: 修改用户密码,报错email为空!
断点处报错为email为空!
我们需要在model重写关于email的方法,如下:
ps: 对应的修改路由方法详见源码
https://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb#L94
--xiaozhu_personal