密码更新通过Devise安全扩展程序提供批量分配错误

时间:2014-08-05 00:01:08

标签: ruby-on-rails ruby ruby-on-rails-3 devise mass-assignment

我们正在尝试使用Devise Security Extension gem来使用:password_archivable功能,以防止用户重复使用旧密码。每当我们尝试在网站上更改用户密码时,我们都会收到批量分配错误。

我们模型的一部分:

class User < Person
  rolify
  devise :database_authenticatable, #...
         :password_archivable
 #attr_accessible :encrypted_password, :password_salt
  ...
end

我们控制器的一部分:

class HealthPromotersController < ApplicationController
  load_and_authorize_resource

  ...
  def update
    ...
    respond_to do |format|
      if @health_promoter.update_attributes(params[:health_promoter])
        sign_in(@health_promoter, :bypass => true) if @current_user.id == @health_promoter.id

        format.html { redirect_to @health_promoter, notice: 'Health Promoter was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @health_promoter.errors, status: :unprocessable_entity }
      end
    end
  end

当我们转到编辑health_promoter页面并输入密码和password_confirmation时,当password_archivable.rb代码尝试设置时,Devise Security Extension失败并显示encrypted_pa​​ssword和password_salt的批量分配错误:

 OldPassword.new(old_password_params)

ActiveModel::MassAssignmentSecurity::Error at /health_promoters/1 Can't mass-assign protected attributes: encrypted_password, password_salt

我们尝试将:encrypted_pa​​ssword和:password_salt添加到attr_accessible列表,但无济于事。 Devise文档(github.com/plataformatec/devise/blob/3d9dea39b2978e3168604ccda956fb6ec17c5e27/lib/devise/models/authenticatable.rb)说我们可以使用:force_except或:except但不清楚应该如何或在何处指定它。

我们使用以下版本: Ruby 2.0.0p451,Rails 3.2.19,Devise 3.2.4,Devise Security Extension 0.8.0

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

将设计安全扩展程序降级到0.7.2,以便快速修复,因为它可以正常工作