我想基于ruby on rails构建一个Web应用程序。对于身份验证,我使用设计 gem。一切都很好:我可以创建帐户,登录,注销等。
但是我有一个问题。我希望能够在不提供密码的情况下注册,但仍然可以使用其他帐户的密码进行注册。
我已在config / initializers / devise.rb上将密码长度从0设置为128
config.password_length = 0..128
但接下来的步骤是什么呢?
谢谢
答案 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的完整实现。这取决于你想要达到的目的。