Ruby on rails 4 使用多个用户名设计3.4.1,并重置密码禁止属性错误
我的用户模型中有多个可能的用户名,即用户可以使用其中一个登录。 这是基于以下文章: 实际登录使用这两种代码都可以正常工作,但按照示例,我无法正确启动重置密码页面 这是一个多租户场景,因此还需要考虑一个帐户id。 我发现许多其他人也有同样的问题——但如果我允许的话,我不知道解决这个问题的正确方法是什么!在下面的相关方法中,然后重置密码功能,但标准登录不再起作用 我收到一个禁止的属性错误,如下所示:Ruby on rails 4 使用多个用户名设计3.4.1,并重置密码禁止属性错误,ruby-on-rails-4,devise,Ruby On Rails 4,Devise,我的用户模型中有多个可能的用户名,即用户可以使用其中一个登录。 这是基于以下文章: 实际登录使用这两种代码都可以正常工作,但按照示例,我无法正确启动重置密码页面 这是一个多租户场景,因此还需要考虑一个帐户id。 我发现许多其他人也有同样的问题——但如果我允许的话,我不知道解决这个问题的正确方法是什么!在下面的相关方法中,然后重置密码功能,但标准登录不再起作用 我收到一个禁止的属性错误,如下所示: ActiveModel::ForbiddenAttributesError - ActiveMo
ActiveModel::ForbiddenAttributesError - ActiveModel::ForbiddenAttributesError:
activemodel (4.1.6) lib/active_model/forbidden_attributes_protection.rb:21:in `sanitize_for_mass_assignment'
activerecord (4.1.6) lib/active_record/relation/query_methods.rb:568:in `where!'
activerecord (4.1.6) lib/active_record/relation/query_methods.rb:559:in `where'
activerecord (4.1.6) lib/active_record/querying.rb:10:in `where'
app/models/user.rb:356:in `find_first_by_auth_conditions'
devise (3.4.1) lib/devise/models/authenticatable.rb:266:in `find_or_initialize_with_errors'
devise (3.4.1) lib/devise/models/recoverable.rb:115:in `send_reset_password_instructions'
devise (3.4.1) app/controllers/devise/passwords_controller.rb:13:in `create'
User.rb
devise :database_authenticatable, :recoverable, :rememberable, :trackable, authentication_keys: [:login, :account_id], reset_password_keys: [:login, :account_id]
....
def self.find_first_by_auth_conditions(warden_conditions)
# IF i switch these 2 lines then reset password works BUT normal login doesn't
#conditions = warden_conditions.dup.permit!
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions).where(["lower(remote_id) = :value OR lower(other_id) = :value", { :value => login.downcase }]).first
else
where(conditions).first
end
end
应用程序\u controller.rb
before_action :configure_permitted_parameters, if: :devise_controller?
...
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:remote_id, :email, :password, :password_confirmation, :remember_me) }
devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :remote_id, :email, :password, :remember_me) }
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:remote_id, :email, :password, :password_confirmation, :current_password) }
end
使用Desive 3.4.1,rails 4.1.6