查看django版本_Django解决Samesite跨域问题

问题

最近再给客户做一个项目,但是需要通过iframe嵌入我们的系统,实现他们系统本身的登录,一切就绪怎么就不能登录了呢?

F12打开瞧瞧,是不是后端的问题,奇了怪了,接口200啊,没毛病啊

371707168942da03152ab068db98ba4b.png

找问题原因

二话不说,Google吧,果然大家都遇到过啊....

c59fc7df79693e7b793bf1a399048590.png

还给了解决办法,加参数:

3a0a5690f27b6f6610f649502757c845.png

解决方法-实践

看输出信息,应该是cookie的SameSite属性不正确的问题,但是以前没这个问题啊。最后,经过查看各种资料发现,chrome升级到80版本之后,cookie的SameSite属性默认值由None变为Lax。

c7e14a3f393960320e99593a6e7c1c2f.png

解决方式如下:

  • 最简单(适合临时调试):设置chrome为禁用samesite。需要每个客户端修改设置,不现实。打开链接:chrome://flags/#same-site-by-default-cookies。然后搜索:SameSite by default cookies,将default改成disable即可。
35f8c17de84c854a2bedf0729ff80821.png
  • 修改程序,主动设置SameSite属性。Django版本高于2.1,直接设置SESSION_COOKIE_SAMESITE=None即可;
  • 如果DJango版本低于2.1需要引入库django-cookie-samesite来处理:
    • 安装django cookies samesite: pip install django-cookies-samesite
    • 将中间件添加到中间件类的顶部MIDDLEWARE_CLASSES = ( 'django_cookies_samesite.middleware.CookiesSameSite', ... )
    • 在settings.py中设置首选的samesite策略:
SESSION_COOKIE_SECURE = True SESSION_COOKIE_SAMESITE = 'None' 

  • 注:必须同时有secure这个属性才行。真是个坑!

总结

 根据上述,总共三种操作方式,汇整如下:

  • 最简单:设置chrom为禁用samesite
  • DJango版本低于2.1:引入库django-cookie-samesite来处理
  • Django版本高于2.1:直接设置SESSION_COOKIE_SAMESITE=None
019325c5cbe6ff47cf20ad25b22ddd5f.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值