Rails对于Cookie的加密和解密方法

Rails的Session默认是存储在Cookies中的,Cookies显性存储在浏览器中,因此基于安全性的考虑,对Cookies进行加密是非常有必要的。

比如session的数据{user_id: 100},加密存储在Cookies中可能就是这样的形式:

BAh7BzoHaWRpBjoJbmFtZUkiC3cuZGVuZwY6BkVU--a547f29403e3d53174ddd88b7a3a64dfb8fdce6024d27105292fdbdf43c19f07

具体实现的方法是使用ActiveSupport::MessageVerifier这个类。

http://api.rubyonrails.org/classes/ActiveSupport/MessageVerifier.html

    @verifier = ActiveSupport::MessageVerifier.new('s3Krit', digest: 'SHA256')

    # 加密
    cookies[:remember_me] = @verifier.generate([@user.id, 2.weeks.from_now])

    # 解密
    id, time = @verifier.verify(cookies[:remember_me])

这里的s3Krit,是加密用的secret,一般会使用特别长的随机字符,Rails中会使用config/secrets.yml中的设置,加密后被破解的几率就大大降低了。

为什么会研究这个,因为前后端分离,打算在API调用的请求加上用户登录的验证,需要把用户的session数据加密记录在前端,调用API的时候请求的header中加上此数据。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,374评论 11 349
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,778评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,839评论 0 11
  • 今天再次看了一遍《友谊》这一章。心情还是有点浮躁。特别想搞懂友谊这一章是因为我的人际关系被我弄的太差了。 有很多我...
    一心小茶客阅读 295评论 0 1