Laravel 5 VerifyCsrfToken在iPhone上不匹配

时间:2015-03-04 18:39:21

标签: laravel-5

在响应式网站上工作,但在Laravel 5上遇到VerifyCsrfToken中间件问题。

前端是在AngularJS上构建的,Laravel正在为应用程序提供服务。

在桌面上,当我向Laravel上的API发出请求时,来自前端请求标头的令牌与Laravel会话上的令牌匹配,因此我可以访问API。但是,在iPhone上,这些并不匹配。

我在Illuminate\Foundation\Http\Middleware\VerifyCsrfToken PHP类中添加了一些日志语句,因此我检查了传递给类的内容。

从桌面请求时的服务器日志:

[2015-03-04 18:18:07] local.INFO: request header token: MVQ7u5fkjBTMRsM0GyOX0wuBcRwYMnWVsKDceQZ7
[2015-03-04 18:18:07] local.INFO: session token: MVQ7u5fkjBTMRsM0GyOX0wuBcRwYMnWVsKDceQZ7

从iPhone请求时的服务器日志:

[2015-03-04 18:17:25] local.INFO: request header token: hDIiwrPiM9r5XI6QPPp1DIvp6s7gqGDk5gg9Dqus
[2015-03-04 18:17:25] local.INFO: session token: GvxO0zpTJzJsZ32hX5HHPtMxf7ex1bFEtmUWMlyV
[2015-03-04 18:17:25] local.ERROR: exception 'Illuminate\Session\TokenMismatchException' in /home/planmons/laravel/tennis/storage/framework/compiled.php:2410

这不会发生在XCode iOS模拟器上,而只发生在设备上。

我不知道在哪里进一步观察/调查,所以我将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

可能与您的问题不一样,但我发现iOS浏览器中的禁用Cookie 会禁用与PHP / Laravel5进行会话的可能性。因此,对于请求,将计算新的CsrfToken,在我们的案例中为POST /auth/login

我用一个中间件解决了这个问题,它检查在使用POST / PUT / DELETE时是否设置了Session-Cookie。