【发布时间】:2015-12-18 01:35:20
【问题描述】:
我只在手机上得到这个TokenMismatchException。
iOS 9.1 / iPhone 6 Plus / Safari
我试过添加这个
<meta name="csrf-token" content="{{ csrf_token() }}">
这在我的登录表单中
{{ csrf_field() }}
不适用于我的 iPhone (iOS 9.1 / iPhone 6 Plus / Safari)
但我仍然可以登录计算机/笔记本电脑。
HTML 表单
<form method="POST" action="http://localhost:8888/sign-in" accept-charset="UTF-8" class="form-horizontal" role="form">
<input name="_token" type="hidden" value="AMzt0uxA2vv79VGmR6WLtaVR5jGa9ZDbv07uI2Pb">
<p class="pad-btm">Sign In to your account</p>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon"><i class="fa fa-envelope"></i></div>
<input required="" class="form-control" placeholder="Email" name="email" type="email" value="">
</div>
</div>
<div class="row">
<div class="col-xs-8"></div>
<div class="col-xs-4">
<div class="form-group text-right">
<button type="submit" class="btn btn-success text-uppercase">Sign In</button>
</div>
</div>
</div>
<input type="hidden" name="_token" value="AMzt0uxA2vv79VGmR6WLtaVR5jGa9ZDbv07uI2Pb">
</form>
有人知道为什么会这样吗?
更新
它适用于 iPhone 6 Plus iOS 9.1 上的 Chrome。
【问题讨论】:
-
那是因为您没有在 post 调用中发送 csrf 令牌,您必须在服务器上建立一个简单的 GET 调用,检索返回的 csrf 令牌并将其与您的 POST 调用一起发送为
_token它会起作用。或者,简单地禁用 csrf 检查 -
如何禁用 csrf 检查?你能回答吗?
-
注释掉会起作用。我确信这一点,因为我对我的应用程序使用相同的方式。
-
禁用csrf不是解决办法!!您应该真正研究为什么 CSRF 令牌未包含在移动设备上的 POST 数据中。什么手机?安卓/IOS?什么版本?什么浏览器?
-
@ihue 如果 chrome 工作,那么问题是 safari 阻止了 cookie,这只是 safari 中需要启用的设置。
标签: php laravel laravel-5 laravel-5.1