2014-08-28 107 views
2

我在数据库中创建了一个username列。现在我想删除email,然后用户sign up只需username。为此,我可以在sign up页面创建username字段,但是我必须再次填写电子邮件字段,即服务器创建新用户,否则,我会收到电子邮件字段的验证错误。 如何删除电子邮件验证并将其替换为用户名的个人验证?然后用户只需注册输入usernamepassword? 我有下面的代码:设计:使用用户名注册

users_controller.rb

def user_params 
    params.require(:user).permit(:username, :email, :password, :password_confirmation, :remember_me) 
    end 

views/devise/registrations/new.html.erb

<h2>Sign up</h2> 

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 

    <div><%= f.label :email %><br /> 
    <%= f.email_field :email, autofocus: true %></div> 

    <div><%= f.label :username %><br /> 
    <%= f.email_field :username %></div> 

    <div><%= f.label :password %> <% if @validatable %><i>(<%= @minimum_password_length %> characters minimum)</i><% end %><br /> 
    <%= f.password_field :password, autocomplete: "off" %></div> 

    <div><%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation, autocomplete: "off" %></div> 

    <div><%= f.submit "Sign up" %></div> 
<% end %> 

<%= render "user/shared/links" %> 
+0

有几个问题适合您。由于您完全删除电子邮件字段,因此您将如何向用户发送确认说明?你将如何发送密码重置指令给用户? – Mandeep 2014-08-29 15:47:14

+0

用户不能自行创建账户,Superadmin通过用户名创建新用户,如果用户忘记密码,superadmin可以重置密码。我获得用户电话号码并将密码重置为其号码。 – mgh 2014-08-29 16:26:28

+1

我不认为设计会让你删除所有电子邮件,因为它需要它用于其他目的。从你告诉我,我认为它会更好,如果你创建自己的简单认证系统,而不是试图定制设计或其他宝石 – Mandeep 2014-08-29 16:34:08

回答

2

如果选中的文档,你有一个部分解释如何做到这一点here

就我个人而言,我不会从用户设置中删除电子邮件,并坚持使用文档上的建议来创建称为登录的虚拟属性。

如果要完全删除电子邮件,则需要通过迁移将其删除,以便从数据库表中删除字段并将其从模型验证中删除。 此外,您还需要通过用用户名替换电子邮件来更新您的视图或部分。请注意,您需要更新文档中提及的authentication_keys(使用用户名而不是登录名)

+0

我不希望允许用户注册电子邮件和用户必须注册用户名与个人验证。我只想用'username'替换'email'并覆盖设计管理器来检查usernmae验证并删除电子邮件验证。通过这个文档,我必须得到用户的电子邮件地址。 – mgh 2014-08-28 15:21:06

+1

@mgh我已更新了您可以遵循的某些指示的答案。 – 2014-08-28 16:10:46

+0

嗯我做了一切,但它不起作用。我没有看到虚拟属性“登录”和其他任何东西之间的连接。它只是说无效的电子邮件 – dabadaba 2015-07-28 18:12:15