Laravel middleware returning (Trying to get property 'headers' of non-object) error

ⅰ亾dé卋堺 提交于 2020-05-29 18:06:20

问题


I'm getting error when I wrap a resource route to my custom middleware

My middleware:

<?php

 namespace App\Http\Middleware;

 use Closure;
 use Auth;

class Officer
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (Auth::check() && Auth::user()->role == 'title_officer') {
            return $next($request);
        }
        // elseif (Auth::check() && Auth::user()->role == 'agent') {
        //     return redirect('/agent');
        // }
        // else {
        //     return redirect('/customer');
        // }
    }
}

The resource route using the middleware:

Route::resource('new-order', 'BackendController')->middleware('officer');

I'm getting error:

(Trying to get property 'headers' of non-object).

How to fix it ?


回答1:


In middleware, it is important to handle all cases and return the redirects accordingly or abort.

You do return $next($request); when you want to allow system to continue processing the request ahead.

However, if in case if (Auth::check() && Auth::user()->role == 'title_officer') condition fails, you have not mentioned what system should do.

You can may be abort(404) if you do not want to show the page as available or maybe abort(403) for access forbidden.

public function handle($request, Closure $next)
    {
        if (Auth::check() && Auth::user()->role == 'title_officer') {
            return $next($request);
        }
        abort(403);
    }

But make sure you do not add a case which will make an infinite loop. Please check documentation for more options.




回答2:


try adding an else block which returns when your if condition isn't met:

public function handle($request, Closure $next)
    {
        if (Auth::check() && Auth::user()->role == 'title_officer') {
            return $next($request);
        }else{
           return back();
        }
    }


来源:https://stackoverflow.com/questions/54643562/laravel-middleware-returning-trying-to-get-property-headers-of-non-object-er

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!