【问题标题】:"Method not allowed" returned to ajax call upon session expiry“方法不允许”在会话到期时返回给 ajax 调用
【发布时间】:2018-02-15 19:22:36
【问题描述】:

我有一个表格,我在其中显示类别列表和每行上每个类别的删除按钮。使用以下路由通过 ajax 调用删除操作:

Route::delete('category/delete/{id}','CategoriesController@destroy')->name('category.delete');

它工作正常。但是后来我让页面保持打开状态,一段时间后页面仍然打开时又回来了。现在,当我尝试删除一个类别时,我的控制器收到 Method not allowed 错误。我认为这与会话过期有关。

我的问题是:
1. 为什么会这样
2.我如何在服务器端处理这个问题,以便在会话过期并且用户尝试访问受保护的路由(通过 ajax)时,服务器会检测到会话到期并向 ajax 调用或重定向发送特定响应用户到登录页面。

我的 ajax 调用期望从服务器返回一个 json 类型。

谢谢,

【问题讨论】:

  • 哪个版本的 Laravel?你在使用api 路由吗?如果是这样,则会话未通过它,您需要手动检查它或添加中间件。
  • 如果您的会话已过期,那么它将重定向到登录 (302) 或给出 401 响应代码。您应该检查您的请求的响应代码。
  • @UnamataSanatarai:不,我没有使用 api 路由。
  • @GopalKildoliya:在网络选项卡中,我可以看到此请求的状态代码是 302 Found 但在位置字段中告诉我再次被重定向到此页面(@ 987654321@) 而不是登录页面。我想这就是为什么我得到状态代码 405 Method not allowed 因为这是一个 GET 路由,但在这里被重定向为 DELETE 路由。

标签: jquery ajax laravel session


【解决方案1】:

当会话过期时,任何需要身份验证的路由都会重定向到 /login 端点,因为这只是 get&post,所以 delete 会失败。

可能的解决方案:

  • 增加会话持续时间(默认为 120 分钟)
  • 添加jquery拦截器检测401和window.location.reload()浏览器窗口让用户自己去登录页面
  • 在脚本中设置一个计时器,每隔约 5/10 分钟左右“ping”一次服务器,从而中断会话

【讨论】:

  • 您的意思是 405 吗?因为我得到的是 405 而不是 401。还有任何服务器端解决方案,例如检查传入请求的会话验证并重定向到登录页面的中间件。我猜 Auth 中间件应该已经这样做了,因为我的路由受到 Auth 中间件的保护。但它没有这样做!
  • 只有 ajax 会通过身份验证检查并被重定向到登录,而不是浏览器本身,并且您可以/喊检查 405 和 401 以获得最大覆盖率
猜你喜欢
  • 2011-03-04
  • 2016-09-20
  • 1970-01-01
  • 2011-04-28
  • 2021-04-06
  • 2017-03-22
  • 2018-07-21
  • 1970-01-01
  • 2014-03-30
相关资源
最近更新 更多