【问题标题】:Auth::check() fails on an ajax call (sometimes)Auth::check() 在 ajax 调用中失败(有时)
【发布时间】:2015-04-15 01:38:29
【问题描述】:

我有一个登录用户可以访问我的 JavaScript 应用程序。

在初始化期间,应用会发送几个 Ajax 调用来收集一些信息。

有时,我会说大约十分之一,其中一个调用在我的一个路由过滤器中中止。

我对此的观察:

  • 并非每次都发生
  • 并不总是相同的路线(呼叫)
  • 可能同时出现多个故障
  • 一个简单的页面刷新重新触发调用,并且 因为这不是一个持续的失败,所以一切都会恢复正常...... 直到下一个故障。

这是有问题的过滤器:
我知道是这个,因为我用418 替换了403,它把“禁止”故障变成了“茶壶”故障。

Route::filter('auth-api', function() {
   if (!Auth::check()) { App::abort(403, "Auth-api filter denied"); } 
});

这是一个奇怪的错误:
所有/api/[whatever] 都经过相同的过滤器,在这种情况下,/api/assurances 死了,而其他的则正常。

【问题讨论】:

  • 您使用的是什么会话驱动程序?
  • 为了提供更多信息 - 您可能需要在检查前后记录每条路线的会话数据 - 并不断破坏您的路线,直到出现错误 - 然后查看日志显示的内容.它可能与以下内容有关:github.com/laravel/framework/issues/5416
  • 我正在使用 eloquent 驱动程序,我会在回到我的开发环境后立即查看这项调查。此外,github问题似乎指出了我的问题。我会根据我的意见不断调整他们
  • 雄辩的驱动程序是 auth 驱动程序 - 而不是 session 驱动程序。您使用的是哪个 session 驱动程序?文件、redis、memcache 等?也许尝试更改会话驱动程序以查看是否使用其他驱动程序出现问题。
  • 我正在使用“本机”驱动程序。我无法使用“cookie”驱动程序重现该错误。根据我对 GitHub 线程的理解和这次经验,我认为这意味着基于文件的会话不适用于 Ajax 应用程序。您如何看待使用“cookie”驱动程序(或任何其他驱动程序)?

标签: ajax laravel laravel-4


【解决方案1】:

听起来您的会话由于某种原因失败了。这可能是由于file 会话驱动程序,在短时间内连续多次访问时会导致竞争条件。

最好的选择是更改会话驱动程序并测试另一个会话驱动程序是否仍然存在问题。我建议尝试使用 Redis 或 Memcache - 因为它们旨在快速、快速和可靠。

【讨论】:

    猜你喜欢
    • 2014-11-19
    • 1970-01-01
    • 2016-09-27
    • 2017-04-30
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多