【问题标题】:Detecting unauthenticated ajax requests in Laravel在 Laravel 中检测未经身份验证的 ajax 请求
【发布时间】:2017-09-09 23:49:34
【问题描述】:

我正在尝试处理从空闲/过期会话发起的 ajax 请求(可能页面保持打开状态并且会话已过期)。我编写了以下中间件,但它没有按预期工作:

namespace App\Http\Middleware;

use Closure;

class AjaxSessionCheck
{
/**
* Handle an incoming request.
*
* @param  \Illuminate\Http\Request  $request
* @param  \Closure  $next
* @return mixed
*/
public function handle($request, Closure $next)
{
    if(!\Auth::check())
    {
        if($request->ajax())
        {
            return response()->json(['Session_error'=>'Session Expired'], 401);
        }
    }
    return $next($request);
}
}

我还尝试将此代码添加到 Auth 中间件,但没有成功。 奇怪由此检测到足够多的经过身份验证的(用户登录的)ajax 请求。

失去了 2 天寻找解决方案。在这里拼命打电话。

【问题讨论】:

    标签: ajax laravel


    【解决方案1】:

    使用优化代码来提高性能,同时使用 auth::check 和 request->ajax() 在相​​同的 if 条件下通过 AND 运算符。只需在配置文件中尝试会话到期

    【讨论】:

      【解决方案2】:

      这是因为会话在中间件之后运行,你可以在这里看到reference。如果你想检查会话是否过期,我认为你应该在中间件之后而不是在中间件之前使用

      【讨论】:

      • 在中间件之后尝试过。没运气。当请求来自无效会话时,它甚至没有触及这部分代码。不知道去哪里找。
      • 你是否在 kernel.php 文件中声明了你的中间件?
      • 是的,我做到了。我可以告诉它在会话有效时有效。就像它检测到来自有效会话的 ajax 请求一样。但是对于无效会话,没有运气。我猜身份验证系统检测到它的无效会话,所以可能不会让请求通过..我不知道。太令人沮丧了!!
      • 中间件用于在不允许用户访问某个页面时重定向用户。但是如果你return response(),它就不能显示任何页面。顺便说一句,我还没有尝试过$request->ajax(),但我认为问题就在那里,我在我的代码中尝试过,它不能return response()。我var_dump()它,它返回false。
      • 感谢您的帮助。谢谢你。如果我有东西会回来的。
      猜你喜欢
      • 2018-10-19
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 2017-08-12
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多