Laravel &引用;试图获得财产';标题';“非对象”的定义;中间件\VerifyCsrfToken.php:180

Laravel &引用;试图获得财产';标题';“非对象”的定义;中间件\VerifyCsrfToken.php:180,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,我编写了自定义中间件,但当它被执行时,会出现错误。 中间件: namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; use App\Employee; class CheckConfirm { public function handle($request, Closure $next) { if(Auth::check()) { $i

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

namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
use App\Employee;

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');                    
   }
条件就是不起作用。 在这种情况下,将成功执行数据库查询。

替换此行:

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

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

然后对每一行执行dd(),查看失败的位置。可能缺少csrf令牌或用户未登录。

您的中间件必须返回
响应
对象,或
$next($request)
。如前所述,当未登录或
$emp
为空时,中间件只返回字符串,而不是重定向

将您的申报表更新至:

return redirect()->route('confirm');


分别。

这很难修复,我尝试使用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');
}

谢谢你的帮助。由于存在一个外部条件:
if(Auth::check())
,用户被自动调整大小。当我使用
first()
时,我遇到了一个新错误:“在null上调用成员函数isEmpty()”删除isEmpty(),在获取单个用户时不需要它当我使用此条件时:
如果($emp){return route('confirm');}
则什么也不会发生,但我使用了
dump($empl)
它告诉我变量为null,但当我尝试此操作时:
如果($empl==null){return route('confirm');}
我得到了与开始时抱怨的相同的错误。Thaks寻求帮助,但我的项目最终被破坏)当我尝试登录或注册时,它试图在正确的url上重定向我,但立即返回登录。@VladislavFinder如果您遇到更多问题,您需要发布一个新问题,其中包含更新的代码和您遇到的新问题。根据您如何设置路由的中间件,身份验证帖子也会(或不会)发布在进行实际登录之前,请评估您编写的这个中间件,这样它就永远不会对用户进行身份验证。
if ($exception->getMessage() == "Trying to get property 'headers' of non-object") {
  return redirect()->route('my.default.page');
}