2013-03-16 3 views
0

Я использую authlogic для аутентификации и используя this учебник. Я также ссылался на rubyDocs. Если я правильно понимаю, что метод attr_protected гарантирует, что список атрибутов не будет доступен для массового присвоения. И мои атрибуты модели защищены. Я также попытался изменить флаг белого списка в config/application.rb на false .., который не имел никакого значения.Ошибка при использовании authlogic для входа в систему:: Невозможно назначить защищенные атрибуты:

Я думаю, что проблема может быть из-за отсутствия атрибута, называемого паролем & password_confirmation в пользовательской модели. Это то, что говорится в учебнике.

Мы изменили имя поля с: crypted_password на: password. Authlogic отобразит поле пароля в: crypted_password после хеширует его. Мы также изменили тип поля из f.text_field на f.password_field, это создаст ваше стандартное поле ввода пароля вместо поля ввода обычного текста. Мы также добавили поле : password_confirmation. Вся логика для поддержки этих полей встроена в authlogic.

Это все еще так? Любые предложения по устранению этой проблемы?

Rails: 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 

CONTROLLER

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> 

Благодаря

ответ

1

Кажется, что, как вы сказали, ваши атрибуты защищены, поэтому они не могут быть назначены массы. Сделать их доступными путем добавления к списку attr_accessible

class User < ActiveRecord::Base 
    attr_accessible :crypted_password, :email, :password_salt, :persistence_token, :username, :password, :password_confirmation 
end 

Примечание: Вы также можете удалить конфиденциальные данные из этого списка, как :crypted_password или :password_salt

class User < ActiveRecord::Base 
    attr_accessible :email, :persistence_token, :username, :password, :password_confirmation 
end