龙空技术网

Django解决Samesite跨域问题

阿毛杂记 118

前言:

今天各位老铁们对“django引入多个app时出现跨域问题引入单个没问题”可能比较珍视,我们都需要了解一些“django引入多个app时出现跨域问题引入单个没问题”的相关文章。那么小编同时在网摘上网罗了一些对于“django引入多个app时出现跨域问题引入单个没问题””的相关内容,希望咱们能喜欢,我们一起来了解一下吧!

问题

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

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

找问题原因

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

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

解决方法-实践

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

解决方式如下:

最简单(适合临时调试):设置chrome为禁用samesite。需要每个客户端修改设置,不现实。打开链接:chrome://flags/#same-site-by-default-cookies。然后搜索:SameSite by default cookies,将default改成disable即可。修改程序,主动设置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为禁用samesiteDJango版本低于2.1:引入库django-cookie-samesite来处理Django版本高于2.1:直接设置SESSION_COOKIE_SAMESITE=None

标签: #django引入多个app时出现跨域问题引入单个没问题