Ruby on rails 轨道3和x2B;设计+;活动\u脚手架如何使不需要密码
我拥有基于Deave的模型代理:Ruby on rails 轨道3和x2B;设计+;活动\u脚手架如何使不需要密码,ruby-on-rails,devise,activescaffold,Ruby On Rails,Devise,Activescaffold,我拥有基于Deave的模型代理: class Agency < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable attr_accessible :name, :email, :phone, :address, :city, :state, :zip,
class Agency < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :name, :email, :phone, :address, :city, :state, :zip,
:notes, :is_admin, :password, :password_confirmation, :remember_me
protected
def password_required?
!persisted? || password.present? || password_confirmation.present?
end
end
classagency
此外,我还有基于active_scaffold的代理控制器:
class Admin::AgenciesController < Admin::BaseController
before_filter :authorize_admin!
active_scaffold :agency do |conf|
actions.exclude :show
create.link.page = true
update.link.page = true
list.columns = [
:name, :email, :phone, :address, :city,
:state, :zip, :notes, :events, :is_admin
]
create.columns = [
:name, :email, :phone, :address, :city, :state, :zip,
:is_admin, :password, :password_confirmation
]
update.columns = [
:name, :email, :phone, :address, :city, :state, :zip,
:is_admin, :password, :password_confirmation
]
columns.add :password
columns.add :password_confirmation
columns[:password].form_ui = :password
columns[:password_confirmation].form_ui = :password
end
end
class Admin::AgenciesController
然后是机构更新表:我想为用户提供一个不填写密码和密码确认字段的机会。但如果用户填写密码字段,则必须填写密码确认字段。 我差一点用密码解决了我的问题?方法。但javascript所需的客户端验证不允许我完全解决问题 如何从客户端删除密码和密码确认字段的JS变量?试试:
validates_confirmation_of :password, :if => :password_required?
validates :password_confirmation, :presence => true, :if => '!password.nil?'
请注意,只有当password\u required?
返回true时才会触发验证,如果password\u required?
字段为nil,则password\u confirmation将返回false
因此,为了使password\u confirmation
字段为零,您只需从表单中删除password\u confirmation
字段,这样您将始终获得零,从而绕过验证
替代解决方案:
(一)
2) 只需在密码字段中保存一个随机生成的安全数字(更好,因为这很容易,而且可以保持一致性)
此外,如果您希望这些字段的标识与用户留下的字段不同,那么您可以为它们提供唯一的密码,以便以后可以施加如下条件:
if(self.password == "something unique" and self.password_confirmation == "something unique")
flash[:notice] = "The user has not password"
end
然后在UI级别,您只需使用上述条件显示为空白。@Saurabh Jain,非常感谢您的建议。
但解决方案非常简单。
我发现active_scaffold为密码字段的输入标记添加了一个必需的属性。
换句话说,客户机得到一个html
<input type="password" required="required" size="30" name="record[password_confirmation]" id="record_password_confirmation_4" class="password_confirmation-input text-input" autocomplete="off">
要在Admin::AgenciesController中激活支架配置(请参见上文)谢谢您的帮助。但这对我没有帮助。问题不在服务器端,而是在客户端。客户端上有一个js check required字段密码。为什么要进行js验证,为什么不能使用功能强大的验证方法处理模型级别的所有验证?js验证会自动添加。我不知道是谁说的:)也许是主动的?好吧,那么诀窍就是随机生成密码字段。请参阅我的更新答案。非常感谢,但您的第二个备选解决方案对我来说绝对不清楚。我把你的密码放哪儿了?你的密码会覆盖我的密码吗?
<input type="password" required="required" size="30" name="record[password_confirmation]" id="record_password_confirmation_4" class="password_confirmation-input text-input" autocomplete="off">
columns[:password].required = false;