Ruby on rails - 设计注册空白密码

时间:2017-01-17 07:46:42

标签: ruby-on-rails ruby devise passwords

我想基于ruby on rails构建一个Web应用程序。对于身份验证,我使用设计 gem。一切都很好:我可以创建帐户,登录,注销等。

但是我有一个问题。我希望能够在不提供密码的情况下注册,但仍然可以使用其他帐户的密码进行注册。

我已在config / initializers / devise.rb上将密码长度从0设置为128

config.password_length = 0..128

但接下来的步骤是什么呢?

谢谢

2 个答案:

答案 0 :(得分:1)

好的,我在这里回答。

感谢Ammar Shah,我想出了如何让用户获得密码和没有密码的用户。

首先使用以下代码在名为 database_authenticatable.rb lib / devise / strategies (创建文件夹)中创建一个文件:

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

谢谢Ammar Shah帮助我!

答案 1 :(得分:0)

将config / initializers / devise.rb中的密码长度重置为默认值,并使用this answer使密码可选。

此外,这是设计维基中gradual engagement feature的完整实现。这取决于你想要达到的目的。