Laravel中间件返回(尝试获取非对象的属性“标题”)错误

e3bfsja2  于 2023-01-06  发布在  其他
关注(0)|答案(6)|浏览(148)

当我将资源路由 Package 到我的定制中间件时,我收到错误
我的中间件

<?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');
        // }
    }
}

使用中间件的资源路由

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

我收到错误:
(尝试获取非对象的属性"header")。

    • 如何修复**
yqhsw0fo

yqhsw0fo1#

在中间件中,处理所有情况并相应地返回重定向或中止是很重要的。
当您希望允许系统继续提前处理请求时,可以执行return $next($request);
但是,如果if (Auth::check() && Auth::user()->role == 'title_officer')条件失败,则您尚未提及系统应执行的操作。
如果您不想显示该页面可用,您可以输入abort(404),或者输入abort(403)表示禁止访问。

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

但请确保您没有添加会导致无限循环的case。请检查documentation以获取更多选项。

bnl4lu3b

bnl4lu3b2#

只需在中间件中使用如下代码:如果已验证则重定向

public function handle($request, Closure $next, $guard = null)
{
     if (Auth::guard($guard)->check()) {
         // your condition
         return redirect('the route name');
     }
}
osh3o9ms

osh3o9ms3#

我遇到了这个错误。在我的控制器中
第一个月
代替
return redirect()->route('dashboard')
这样就能修好了

rjee0c15

rjee0c154#

尝试添加else块,当不满足if条件时返回:

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

yxyvkwin5#

检查中间件功能,你漏了下面一个--

return $next($request);

所以添加这一行。

mzillmmw

mzillmmw6#

晚了,但是..当数据库中的列为空时,这种情况发生在我身上。

相关问题