Auth :: user()在模块__construct()上返回null

时间:2018-06-21 07:10:26

标签: laravel laravel-authentication

我使用laravel-modules创建了一个名为Article的新模块。一些后端路由需要身份验证,我添加了auth中间件和附加权限view_backend。我正在使用https://github.com/spatie/laravel-permission软件包进行角色许可。

问题是,当我尝试访问路由admin/article/posts时,会提示我按预期进行登录。但是登录后,它在__construct()的{​​{1}}方法上显示为空;

我添加了#204中提到的Auth::user()中间件,但没有解决问题。你能指导我解决这个问题吗?我的项目是在Laravel 5.6上并使用最新版本的Laravel-Modules

web

我的项目托管在Github,https://github.com/nasirkhan/laravel-starter/tree/module

2 个答案:

答案 0 :(得分:0)

首先,将Spatie Middleware添加到您的内核中:

protected $routeMiddleware = [
    // ...
    'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
    'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
];

然后在您的控制器中检查权限或角色:

public function __construct(Request $request)
    {
        $this->middleware(['permission: order.index']);
    }

现在,您可以使用$ request-> user()来访问已验证的身份,例如:

public function create(Request $request)
    {
        if ($request->user()->hasRole('admin')) {

           // return view("carmodel.create", ["manufacturers"=>$manufacturers]);
        } else {
            return view("admin.error", ['code'=>'001','msg'=>'err']);
        }
    }

答案 1 :(得分:0)

根据文档:

  

在以前的Laravel版本中,您可以在控制器的构造函数中访问会话变量或经过身份验证的用户。从来没有打算将其作为框架的显式功能。在Laravel 5.3中,由于中间件尚未运行,因此无法在控制器的构造函数中访问会话或经过身份验证的用户。

     

作为替代方案,您可以直接定义基于Closure的中间件   在控制器的构造函数中。使用此功能之前,请确保   您的应用程序正在运行Laravel 5.3.4或更高版本:

public function __construct()
{
    $this->middleware(function ($request, $next) {
        $this->projects = Auth::user()->projects;

        return $next($request);
    });
}

或者您可以键入提示:

public function index(Request $request)
{
    $projects = $request->user()->projects;

    $value = $request->session()->get('key');
}

Docs