我正试图通过添加带有日志行的新中间件来向我的Laravel网站添加一个非常简单的访客日志,但是我在每个请求中都得到两个日志条目?
中间件非常简单:
class LogVisitor
{
public function handle($request, Closure $next)
{
Log::channel('access')->info($request->ip() .';' . $request->url());
return $next($request);
}
}
我什至尝试将日志记录行移至终止方法:
class LogVisitor
{
public function handle($request, Closure $next)
{
return $next($request);
}
public function terminate(Request $request, $response)
{
Log::channel('access')->info($request->ip() .';' . $request->url());
}
}
但是没有什么不同... 我什至尝试将变量添加到$ request变量中,并检查它是否已设置,但是看起来$ request变量在每次执行时也会重置。
看起来整个过程执行了两次,但是如果我尝试在内部创建一个var_dump,它只会显示一次。.
我期望它只能运行一次? 有谁知道如何确保仅取消一项输入请求?
答案 0 :(得分:1)
我认为您正面临来自浏览器的OPTION
飞行前请求。
当您在所在域之外的另一个域上启动请求时,浏览器会启动OPTION
请求,表明您的中间件可能已被捕获。
如果OPTION
请求返回200,则浏览器将运行您需要的Get/Post/..
请求。
尝试一下
class LogVisitor
{
public function handle($request, Closure $next)
{
if ($_SERVER['REQUEST_METHOD']!='OPTIONS') {
Log::channel('access')->info($request->ip() .';' . $request->url());
}
return $next($request);
}
}