在 null 上调用成员函数 isSuperUser()
Call to a member function isSuperUser() on null
我已将此方法添加到我的用户模型中:
public function isSuperUser()
{
return $this->is_superuser;
}
is_superuser
是我的users
table的一列,设置为布尔类型。
然后我创建了这个中间件来检查经过身份验证的用户是否是管理员(超级用户):
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 版本
我已将此方法添加到我的用户模型中:
public function isSuperUser()
{
return $this->is_superuser;
}
is_superuser
是我的users
table的一列,设置为布尔类型。
然后我创建了这个中间件来检查经过身份验证的用户是否是管理员(超级用户):
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 版本