2017-01-17 83 views
0

我想建立一個基於軌道上的紅寶石的Web應用程序。對於身份驗證,我使用設計寶石。一切都很好:我可以創建帳戶,登錄,註銷等。紅寶石軌道 - 設計註冊空白密碼

但是在這裏我有一個問題。我希望能夠在不提供密碼的情況下進行註冊,但仍可以使用其他帳戶的密碼進行註冊。

我設置爲0的密碼lenght 128上配置/初始化/ devise.rb

config.password_length = 0..128 

但什麼是下一步做我想要什麼?

謝謝

+0

試試這個:http://stackoverflow.com/questions/23857049/in-rails-when-using-the-devise-gem-how-to-create-a-user-without-email-and-passwo –

回答

0

好吧,我在這裏回覆作爲答覆。

感謝Ammar Shah,我想出瞭如何讓用戶輸入密碼和沒有密碼的用戶。

首先創建LIB文件/設計/戰略與下面的代碼(創建文件夾)命名database_authenticatable.rb

require 'devise/strategies/authenticatable' 

module Devise 
    module Strategies 
    # Default strategy for signing in a user, based on their email and password in the database. 
    class DatabaseAuthenticatable < Authenticatable 
     def authenticate! 
     if password.blank? 
      authentication_hash[:encrypted_password] = '' 
     end 
     resource = mapping.to.find_for_database_authentication(authentication_hash) 
     hashed = false 

     if validate(resource){ hashed = true; resource.valid_password?(password) } 
      remember_me(resource) 
      resource.after_database_authentication 
      success!(resource) 
     end 

     mapping.to.new.password = password if !hashed && Devise.paranoid 
     fail(:not_found_in_database) unless resource 
     end 
    end 
    end 
end 

Warden::Strategies.add(:database_authenticatable, Devise::Strategies::DatabaseAuthenticatable) 
devise_create_user.rb遷移添加

然後:

t.string :remember_token 

終於在user.rb型號:

before_create :remember_value 

def valid_password?(password) 
    if password.blank? 
     true 
    else 
     super 
    end 
end 

def password_required? 
    new_record? ? false : super 
end 

def remember_value 
    self.remember_token ||= Devise.friendly_token 
end 

謝謝阿馬爾沙阿幫助我!

0

重置密碼長度在配置/初始化/ devise.rb爲默認值,並使用this answer,使密碼可選。

另外,下面是設計wiki中的gradual engagement feature的完整實現。這取決於你想要達到的目標。

+0

這適用於註冊。所以我讓我的用戶在加密密碼爲空的數據庫中。但是我無法在沒有密碼的情況下登錄。這會引發**無效**錯誤。 – utiiz

+0

當然,你不能。您希望有能力在沒有密碼的情況下注冊您的用戶,而不是正確登錄?這不是設計的方式,你需要一種方法來最終爲每個用戶設置密碼,這就是我提到的逐步實現互動功能的原因。 –

+0

好的,但您提到的漸進式互動功能實施要求用戶在要確認其帳戶時提供密碼。但這不是我想要的。 所以我沒有辦法使用設計和登錄沒有密碼,並且從不要求用戶提供密碼? – utiiz