我使用的是 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'); }); });
内核.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
()
总是返回空值。
感谢您的建议!
最佳答案
我遇到了 Auth::user()
总是返回 null
的情况,这是因为我试图让 User
Controller 的构造函数。
我意识到您无法在 Controller 的构造函数中访问经过身份验证的用户,因为中间件尚未运行。
作为替代方案,您可以直接在 Controller 的构造函数中定义基于闭包的中间件。
namespace App\Http\Controllers;
use App\User;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
class ProjectController extends Controller
{
protected $user;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->user = Auth::user();
return $next($request);
});
}
}
关于php - Auth::user() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35160144/