在响应式网站上工作,但在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模拟器上,而只发生在设备上。
我不知道在哪里进一步观察/调查,所以我将不胜感激。
谢谢!
答案 0 :(得分:1)
可能与您的问题不一样,但我发现iOS浏览器中的禁用Cookie 会禁用与PHP / Laravel5进行会话的可能性。因此,对于请求,将计算新的CsrfToken,在我们的案例中为POST /auth/login
。
我用一个中间件解决了这个问题,它检查在使用POST / PUT / DELETE时是否设置了Session-Cookie。