2014-08-28 116 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