在 null 上调用成员函数 isSuperUser()

Call to a member function isSuperUser() on null

我已将此方法添加到我的用户模型中:

public function isSuperUser()
{
    return $this->is_superuser;
}

is_superuser是我的userstable的一列,设置为布尔类型。

然后我创建了这个中间件来检查经过身份验证的用户是否是管理员(超级用户):

public function handle($request, Closure $next)
    {
        if($request->user()->isSuperUser()) {
            return $next($request);
        }

        return redirect('/');
    }

并且我已经将这个中间件应用于 RouteServiceProvider.php 中的所有管理路由:

Route::middleware('auth.admin')
                ->namespace($this->namespace)
                ->prefix('admin')
                ->group(base_path('routes/web/admin.php'));

但是现在,当我加载其中一个管理路由时,出现此错误:

在 null 时调用成员函数 isSuperUser()

但是我已经登录了我的帐户。

那么这里出了什么问题?我该如何解决这个问题?

改用这个。

// ...

if(auth()->user()?->is_superuser)

// ...

您需要假设用户未登录,因此您应该使用:

if($request->user()?->isSuperUser()) {
   return $next($request);
}

if(optional($request->user())->isSuperUser()) {
   return $next($request);
}

如果您使用的是旧 PHP 版本