2013-07-01 28 views
0

我按照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 

因此,設計在註冊/登記階段仍然在尋找一個電子郵件。我想我必須編輯色器件的控制器,但沒有得到安裝在以下命令

  1. 軌摹色器件:安裝
  2. 軌摹色器件用戶
  3. 軌摹色器件:觀點

所以我的Rails應用程序可能使用了默認的設計控制器(/usr/local/rvm/gems/ruby-2.0.0-p195/gems/devise-1.5.4/app/controllers/devise/registrations_controller.rb),但我在那裏沒有看到任何對「電子郵件」的引用。

如何在註冊/註冊期間更改設計以接受用戶名?任何幫助將不勝感激。

+0

我要檢查的第一件事就是確保'email'列從'users'表中消失。 –

+0

好的,電子郵件字段仍在用戶表中,但我已將其刪除。 – olveram

+0

所以,刪除用戶表中的電子郵件列後,我重新啓動我的應用程序,並嘗試註冊一個新的用戶名和姓氏後出現此錯誤:http://pastebin.com/PWfBNxu0 – olveram

回答

0

看起來你在你登錄系統後丟棄的電子郵件都沒有。這與Devise文章完全不同,後者仍然具有電子郵件屬性,但只能使用uername登錄。

解決問題之前,雙倍認爲它。這真的不是一個好的做法。

  1. 最常見的設計模塊依靠電子郵件將無法正常工作,可證實,密碼恢復,密碼確認等你真的想要嗎?如果用戶丟失密碼並恢復,該怎麼辦?沒有辦法在這個系統!

  2. 在您的應用中,無法通知用戶任何重要的通知,例如重大TOS更改。

  3. 您正在系統中邀請垃圾郵件。

+0

1.「你真的想要那個嗎?」不,我想我可以在創建用戶後解決這個問題。 2.同上,我會弄清楚如何解決,我得到一個用戶創建。 3.是的,我會,但過了一段時間,我不會有更多的新用戶,並會禁用註冊過程。或想到別的東西。 – olveram

+0

@olveram,如果你不想這樣做,就不要這樣做。如果沒有電子郵件的情況下,通過此功能將需要Devise大量的黑客攻擊。如果黑客只適合這種不需要的功能,那就浪費時間。 –

+0

我的問題是,有些用戶不會有電子郵件地址,我希望他們可以很容易地註冊。 – olveram

0

你有沒有「修改配置/初始化/ devise.rb有:」

config.authentication_keys = [ :username ] 
+0

是的,我忘了在原帖中添加: config.authentication_keys = [:用戶名] – olveram

+0

出門約會,今晚晚些時候回來。感謝所有的幫助,我欣賞它。 – olveram