$request->user()->role 错误 - 试图获取非对象的 属性

$request->user()->role errror - trying to get property of non-object

我正在创建一个中间件,它将处理授权,比如检查角色然后授权。但是当我做 $role = $request->user()->role;

它给我错误 Trying to get property of non-object。我在这里做错了什么。

这是我的中间件的摘录class

角色中间件

namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use App\Http\Requests;

class RoleMiddleware
{
    public function handle($request, $next) {
    $role = $request->user()->role;

我也想知道区别,想知道哪个最好,我应该授权使用中间件、策略还是门面?

感谢帮助,

谢谢, 桑巴夫

没有"best"方式授权用户。您可以使用 Middleware、Policies 或 Gate,也可以将它们混合使用。

你的问题是:

$role = $request->user()->role;

因为用户并不总是登录。

所以你应该这样改:

$role = $request->user() ? $request->user()->role: 'guest';

为未登录的用户设置 guest 角色并消除错误。