"Trying to get property 'headers' of non-object" 中间件\验证Csrf令牌.php:180



我编写了自定义中间件,但是当它被执行时,出现了错误。中间件:

namespace AppHttpMiddleware;
use Closure;
use IlluminateSupportFacadesAuth;
use AppEmployee;
class CheckConfirm
{
public function handle($request, Closure $next)
{
    if(Auth::check())          
    {
        $id = Auth::id();        
        $empl = Employee::where('user_id','=', $id)->get();
        if($empl->isEmpty())
        {
            return route('confirm');                    
        }
        else
        {                
            dump($empl);
            return $next($request);
        }
    }
    else
    {
        return route('login');
    }
}
}

当我尝试这样的事情时:

if($empl===null)
   {
      return route('confirm');                    
   }

只是不起作用。在这种情况下,数据库查询将成功执行。这是带有dump

这很难修复,我尝试使用App\Http\Middleware\VerifyCsrfToken::except来做到这一点,但不起作用。

我对这个问题的解决方案是使用 App\Exception\Handler::render 方法创建重定向到另一条路由。

if ($exception->getMessage() == "Trying to get property 'headers' of non-object") {
  return redirect()->route('my.default.page');
}

替换此行:

$empl = Employee::where('user_id','=', $id)->get();
        if($empl->isEmpty()){ ... }

有了这个:

$empl = Employee::where('user_id', $id)->first();
        if($empl){ ... }

然后 dd(( 对于每一行,看看它在哪里失败。可能缺少 csrf 令牌或未记录用户。

最新更新