我创建了一个自定义中间件,用于检查请求是由拥有该资源还是由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是空的。用户已登录。
答案 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);