设为首页 - 加入收藏 焦点技术网
热搜:java
当前位置:首页 >

Rails 4 Strong Parameters

2016-04-04 09:53:20.0 java  
导读:为了应对 Mass Assignment 安全问题,rails 4的方法和3不一样,记录一下。。。
##先看看Rails 3里是怎么弄的 ``` # app/models/uesr.rb class User < ActiveRecord::Base attr_accessible :username, :password end # app/controllers/users_controller.rb class UsersController < ApplicationController def create @user = User.create! params[:user] redirect_to @user end end ``` rails 3中是在model里面设置白名单。 ##再来看看Rails 4里怎搞 Rails 4 引入了 Strong Parameters 的机制,model不再负责白名单的维护,把过滤非法属性的职责推给了 Controller。 ``` # app/models/uesr.rb class User < ActiveRecord::Base; end # app/controllers/users_controller.rb class UsersController < ApplicationController def create @user = User.create! user_params redirect_to @user end private def user_params params.require(:user).permit(:username, :password) end end ``` View传过来的params是一个 ActionController::Parameters对象,它有一个 permitted 属性, 默认为 false,如果此时传给model,会报 ActiveModel::ForbiddenAttributesError,只有把 permitted 属性设置为 true后,才能用于model。说白了 Strong Parameter 其是就是一层白名单过滤。 [ActionController::Parameters](http://edgeapi.rubyonrails.org/classes/ActionController/Parameters.html)

(编辑: 抢糖葫芦的强盗)

网友评论