Rails session对象的 as_json方法
Rails 中 session的用法如下
session[:user_id] = "aaaaaa"
取值也用同样的办法:
user_id = session[:user_id]
在前端若需要用到session中的值,则需要用ajax调取。
在rails的Controller里寻找返回session的方法,发现session有一个as_json方法,能够将session打包成json个体,这样只要在Controller里render :json
就可以了。
但实际使用后发现这个方法将session里的所有值都调取了过来,如"session_id"这样敏感的值也包含在里头:
{ "session_id"=>"1c71e95cdc235aa2ebb14fe48c6bea63", "_csrf_token"=>"R+tkH3t8OwjaeYDYi4xwgZuKsI/cMHsRUW3uRit/pZc=", "mid"=>"581fed0aa5af3c089848956c", "login"=>true, "name"=>"alfred", "nick"=>"alfred" }
这就很尴尬了。
看了下文档,这个“as_json()”方法有个默认为nil的参数option, 网上搜不到用例。 就重新回去看文档:
... def as_json(options = nil) #:nodoc: # create a subset of the hash by applying :only or :except subset = if options if attrs = options[:only] slice(*Array(attrs)) elsif attrs = options[:except] except(*Array(attrs)) else self end else self end Hash[subset.map { |k, v| [k.to_s, options ? v.as_json(options.dup) : v.as_json] }] end ....
根据文档,调取session如下
session.as_json(:except => ["session_id","_csrf_token"])
也可以使用":only"和":include"关键词
返回的值就可以控制了
{ "mid"=>"581fed0aa5af3c089848956c", "login"=>true, "name"=>"alfred", "nick"=>"alfred", "member"=>"581fed0aa5af3c089848956c" }
相关推荐
houmenghu 2020-11-17
思君夜未眠 2020-08-25
阳光之吻 2020-08-03
mbcsdn 2020-06-05
我心似明月 2020-11-09
oraclemch 2020-11-06
ltd00 2020-09-12
康慧欣 2020-09-10
waveclouds 2020-09-04
蓝色深海 2020-09-15
jincheng 2020-09-01
取个好名字真难 2020-08-06
歆萌 2020-08-03
婷婷小屋 2020-07-28
solarspot 2020-07-28
MLXY 2020-07-26
dxbjfu0 2020-07-26
songbinxu 2020-07-19
83520298 2020-07-06