我使用Laravel 5.2,中间件有问题,routes.php中有代码
use Illuminate\Contracts\Auth\Access\Gate;
Route::group(['middleware' => 'web'], function () {
Route::auth();
Route::get('/', 'HomeController@index');
});
Route::group(['prefix'=>'admin', 'middleware' => 'admin'], function(){
Route::get('/', function(){
return view('admin.index');
});
Route::get('/user', function(){
return view('admin.user');
});
});
Kernel.php:
protected $routeMiddleware = [
...
'admin' => \App\Http\Middleware\AdminPanel::class,
];
AdminPanel.php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
use App\Role;
class AdminPanel
{
public function handle($request, Closure $next)
{
$user = Auth::user();
dd($user);
if($user){
$role = Role::whereName('admin')->first();
if($user->hasRole($role)){
return $next($request);
}
}
return redirect('/');
}
所以,
$user = Auth::user
()
始终返回null。谢谢您的建议!
8条答案
按热度按时间9lowa7mx1#
我遇到过
Auth::user()
总是返回null
的情况,这是因为我试图在控制器的构造函数中获取User
。我意识到您不能在控制器的构造函数中访问经过身份验证的用户,因为中间件还没有运行。
或者,您可以直接在控制器的构造函数中定义基于闭包的中间件。
zxlwwiss2#
任何使用
Auth()
的路由都必须封装在web
中间件中。你已经接近了,只需将你的Route::group(['prefix' => 'admin'], ...)
移到上面的组中。vfh0ocws3#
在控制器的构造器中定义中间件,它将在这里起作用
blpfk2vs4#
我遇到了同样的问题,因为我没有设置表名。
vwoqyblh5#
我在一个古老的密码里找到了答案
添加这个^作为一个辅助函数,并在任何你想要的地方使用它,例如:
hk8txs486#
只需在调用中包含身份验证中间件
gpnt7bae7#
mnemlml88#
我的
Auth::user()
在视图中返回null