无法访问中间件中的用户模型

时间:2017-11-07 15:23:15

标签: laravel routing middleware

我创建了一个自定义中间件,用于检查请求是由拥有该资源还是由admin拥有的用户提交的。

Route::middleware(['web', 'selforadmin'])->group(function () {
    Route::post('users/update-account/{id}', 'UsersController@UpdateAccount');
    Route::post('users/update-email/{id}', 'UsersController@UpdateEmail');
    Route::post('users/update-password/{id}', 'UsersController@UpdatePassword');
});

然后是中间件处理程序:

public function handle($request, Closure $next)
{

    print_r($request->all());
    print_r($request->user());

    dd();

    return $next($request);
}

但我不知道为什么这里无法访问用户模型。我读到请求需要先从Web中间件传递,所以我做了但仍然无法访问此中间件。

在$ request-> user()或Auth :: user()

上给出null

我正在使用Laravel 5.4

编辑:

正在调用中间件,因为我看到了其他输入。只有Auth是空的。用户已登录。

3 个答案:

答案 0 :(得分:0)

您无法直接在中间件中使用模型进行访问。您需要在中间件中定义terminate方法,以便在将响应发送到浏览器后执行某些处理。

public function terminate($request, $response)
{
    // Your code ...
}

答案 1 :(得分:0)

如果用户未登录,则始终返回null。

有两个解决方案。

首先,检查 $ request-> user()是否为空。

public function handle($request, Closure $next)
{

    if($request->user())
    {
        // do your stuff
    }
    else
    {
        // do otherwise
    }
    return $next($request);
}

其次,在中间件之前添加 auth 中间件,以确保只允许登录用户。

Route::middleware(['web', 'auth', 'selforadmin'])->group(function () {
    // .....
}

答案 2 :(得分:-3)

手柄功能中的

使用此:
$ user = User :: find($ request-> id);