認証に authlogic を使用し、このチュートリアルを使用しています。rubyDocsも参照しました。私が正しく理解している場合、attr_protected メソッドは、一括割り当てのために属性のリストにアクセスできないことを保証します。そして、モデル属性を保護しています。また、config/application.rb のホワイトリスト フラグを false に変更しようとしましたが、違いはありませんでした。
ユーザーモデルに password と password_confirmation という属性がないことが原因ではないかと思います。チュートリアルにはこうある
フィールド名を :crypted_password から :password に変更しました。Authlogic は、ハッシュ後に :password フィールドを :crypted_password にマップします。また、フィールド タイプを f.text_field から f.password_field に変更しました。これにより、プレーン テキスト入力フィールドではなく、標準のパスワード入力フィールドが作成されます。:password_confirmation フィールドも追加しました。これらのフィールドをサポートするすべてのロジックは、authlogic に組み込まれています。
これはまだ本当ですか?この問題を解決する方法について何か提案はありますか?
レール: 3.2.12
ルビー: 1..9.3
ActiveModel::MassAssignmentSecurity::Error in UsersController#create
Can't mass-assign protected attributes: password, password_confirmation
{"utf8"=>"✓",
"authenticity_token"=>"WUw09PvSlIxLUBFFsi1hiK6v0Y3nn7wqkjH3seCkU34=",
"user"=>{"username"=>"test",
"email"=>"test",
"password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]"},
"commit"=>"Create User"}
以下は私のモデルとコントローラーです
モデル
class User < ActiveRecord::Base
attr_accessible :crypted_password, :email, :password_salt, :persistence_token, :username
end
コントローラ
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
FORM.html
div class="field">
<%= f.label :username %><br />
<%= f.text_field :username %>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.text_field :email %>
</div>
<div class="field">
<%= f.label :password %><br />
<%= f.password_field :password %>
</div>
<div class="field">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %>
</div>
ありがとう