Rails session对象的 as_json方法

Rails中Session的精炼使用
本文详细介绍了Rails框架中Session的使用技巧,包括如何安全地获取和设置Session值,避免泄露敏感信息。通过示例代码展示了如何利用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"
}
复制代码

转载于:https://juejin.im/post/5b23e7b36fb9a00e91043c12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值