Laravel 的 XSRF-TOKEN,不同的手机或不同的浏览器,xsrf_token 的值有的有,有的没有??

请教各位大佬!

项目 laravel 5.4 、手机浏览器

m端的接口H5的页面,在不同浏览器访问过接口之后在cookie中依旧没有xsrf_token的值,导致登录不了,有的手机浏览器可以,但在不同的手机端,相同的浏览器也会出现有的有值,有的没有,看源码是只要有get请求就会设置一个xsrf_token的值响应回去,为什么会出现区别对待?还是前端适配的问题??

尼采
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 10

csrf_token 是在什麼時機塞進 cookie 的

6年前 评论
尼采
6年前 评论

有沒有先整理過哪些手機的內建瀏覽器會出現問題,哪些不會
因為我沒辦法模擬你的環境,看能不能用這種方式找一些 pattern

6年前 评论
尼采

@leochien Chrome只要访问过接口就可以了,其他浏览器不定,我手机华为荣耀8 自带浏览器不行,小米5c 微信进页面不行,uc可以

6年前 评论

如果改為 meta 標籤取 csrf token 的方式是否能解決這個問題

6年前 评论

csrf token 每次都不一样,干嘛要放到cookie里,麻烦

6年前 评论
尼采

大佬觉得什么地方合适呢?这个本身是框架处理的响应,有什么好的处理策略吗?

6年前 评论
尼采

@leochien 好像并不能,今天试了几个手机,不同手机相同浏览器有的可以登录,有的不行,框架的报错日志是显示

file
好像是没获取到值,又或者api响应后没在里面设置cookie,正在试着排查

6年前 评论

@尼采 參考文件還可以用以下方式取 csrf token

除了检查 POST 参数中的 CSRF 令牌外,VerifyCsrfToken 中间件还会检查 X-CSRF-TOKEN 请求头。你可以将令牌保存在 HTML meta 标签中:

<meta name="csrf-token" content="{{ csrf_token() }}">

然后,一旦创建了 meta 标记,就可以指示像 jQuery 的库自动将令牌添加到所有请求的头信息中。这可以为基于 AJAX 的应用提供简单、方便的 CSRF 保护:

$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});

要不要換個方式試試看,不然瀏覽器差異解決太麻煩了

6年前 评论
尼采

@leochien 好的,我试试!

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!