我已按照devise wiki启用用户名登录设备(而不是电子邮件)。但我无法弄清楚如何使用设计启用用户名注册/注册。
我已更改注册视图以提示输入姓名和密码。
应用程序/视图/设计/注册/ new.html.erb:
<h3>Sign up</h3>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div><%= f.label :firstname, "First Name", :autofocus => true %><br />
<script type="text/javascript">window.onload = function() {document.getElementById('user_firstname').focus();}</script>
<%= f.text_field :firstname %></div>
<div><%= f.label :lastname, "Last Name", :autofocus => true %><br />
<%= f.text_field :lastname %></div>
<div><%= f.label :password %><br />
<%= f.password_field :password %></div>
<div><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %></div>
<div><%= f.submit "Sign up" %></div>
<% end %>
<%= render :partial => "devise/shared/links" %>
我编辑了我的模型,用姓名生成用户名:
应用程序/模型/ user.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :authentication_keys => [:username]
# Setup accessible (or protected) attributes for your model
#attr_accessor :username
validates_presence_of :firstname, :lastname, :unique => true
after_validation :createUsername
attr_accessible :username, :password, :password_confirmation, :remember_me, :firstname, :lastname
#attr_protected :password
def createUsername
# create username from first-last name
firstnamePart=self.firstname[0,1].downcase
lastnamePart=self.lastname[0,5].downcase
username=lastnamePart + firstnamePart
count=0
while username.length != 7
username=username + count.to_s
count +=1
end
self.username=username
#verify username uniqueness?
end
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first
else
where(conditions).first
end
end
end
但是当我尝试注册时,我收到以下错误。文字必须要做,因为我没有足够的“声誉”来发布图片:
Sign up
1 error prohibited this user from being saved:
Email can't be blank
所以,设计仍然在注册/注册阶段寻找电子邮件。我假设我必须编辑设备的控制器但是没有安装在以下命令中
所以我的rails应用程序可能正在使用默认的设计控制器(/usr/local/rvm/gems/ruby-2.0.0-p195/gems/devise-1.5.4/app/controllers/devise/registrations_controller.rb)但是我没有在那里看到任何对“电子邮件”的引用。
如何在注册/注册期间更改设计以接受用户名?非常感谢任何帮助。
答案 0 :(得分:0)
你有没有“修改config / initializers / devise.rb:”
config.authentication_keys = [ :username ]
答案 1 :(得分:0)
您似乎在登录系统中丢弃了电子邮件。这与仍然具有电子邮件属性但仅使用uername登录的Devise文章完全不同。
在解决问题之前,请仔细考虑一下。这真的不是一个好的做法。
大多数依赖电子邮件的常见Devise模块无法正常工作,可确认,密码恢复,密码确认等。您真的想要吗?如果用户丢失密码并恢复怎么办?在这个系统中没办法!
您无法告知用户您的应用中的任何重要通知,例如主要的TOS更改。
您正在系统中邀请垃圾邮件。