1

私は Michael Hartl のチュートリアルを進めており、sample_data.rake ファイルがあります。データベースにデータを入力しようとすると、「保護された属性を一括割り当てできません: 管理者」というエラーが表示されます。「user.rb」ファイルの「attr_accessible」に「:admin」を追加することで修正できますが、これにより、誰でもハッキングして管理者になることができます。この問題を解決するにはどうすればよいですか?

sample_data.rake ファイル

namespace :db do
  desc "Fill database with sample data"
  task populate: :environment do
    admin = User.create!(name: "Example User",
                 email: "example@railstutorial.org",
                 password: "foobar",
                 password_confirmation: "foobar",
                 admin: true)
      name  = Faker::Name.name
      email = "example-#{n+1}@railstutorial.org"
      password  = "password"
      User.create!(name: name,
                   email: email,
                   password: password,
                   password_confirmation: password)
  end
end

user.rb ファイル

class User < ActiveRecord::Base
  has_many :microposts, dependent: :destroy
  attr_accessible :name, :email, :password, :password_confirmation
  has_secure_password

  before_save { |user| user.email = email.downcase }
  before_save :create_remember_token

  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence:   true,
                    format:     { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
  validates :password, presence: true, length: { minimum: 6 }
  validates :password_confirmation, presence: true

  private

    def create_remember_token
      self.remember_token = SecureRandom.urlsafe_base64
    end
end

助けてくれてありがとう!全くの初心者なので簡単にお願いします。

4

1 に答える 1

4

単に行う:

admin = User.new(...)
admin.admin = true
admin.save

このようにして、管理者フラグを設定する責任があります。params ハッシュを介して管理フラグを設定していません。ただし、あなたの場合、rake ファイルでユーザーを作成することは危険ではありません。次のようなコントローラーで実行された場合、それは可能でした:

User.create(params[:user])

@Edmundがコメントで言ったよう:adminに、リストに追加することは、オプションの1つとしてwithattr_accessibleを実行できることを意味します。.create:admin

于 2013-08-09T21:39:34.110 に答える