Auth::user() returns 空
Auth::user() returns null
我使用 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
()
始终 return 为空。
感谢您的建议!
任何使用Auth()
的路由都必须封装在web
中间件中。您已经很接近了,只需将您的 Route::group(['prefix' => 'admin'], ...)
移到上面的组中即可。
Route::group(['middleware' => 'web'], function () {
Route::auth();
Route::get('/', 'HomeController@index');
// Moving here will ensure that sessions, csrf, etc. is included in all these routes
Route::group(['prefix'=>'admin', 'middleware' => 'admin'], function(){
Route::get('/', function(){
return view('admin.index');
});
Route::get('/user', function(){
return view('admin.user');
});
});
});
我遇到了 Auth::user()
总是 returns null
的情况,这是因为我试图在控制器的构造函数中获取 User
。
我意识到您无法在控制器的构造函数中访问经过身份验证的用户,因为中间件还没有 运行。
作为替代方案,您可以直接在控制器的构造函数中定义基于闭包的中间件。
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);
});
}
}
我遇到了同样的问题,因为我没有设置 table 名称。
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'users';
我的Auth::user()
returnnull
在
时可见
- 我在数据库
中没有用户table
- 我没有 id 字段作为 table users
的主键
Route::middleware('auth:api')->group(function () {
Route::get('/details', 'UserController@details');
});
在你的控制器的构造函数中定义中间件,它就可以解决这个问题
public function __construct()
{
$this->middleware('auth:api');
}
只需在调用中包含您的身份验证中间件
$user = auth('middleware')->user()
我使用 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
()
始终 return 为空。
感谢您的建议!
任何使用Auth()
的路由都必须封装在web
中间件中。您已经很接近了,只需将您的 Route::group(['prefix' => 'admin'], ...)
移到上面的组中即可。
Route::group(['middleware' => 'web'], function () {
Route::auth();
Route::get('/', 'HomeController@index');
// Moving here will ensure that sessions, csrf, etc. is included in all these routes
Route::group(['prefix'=>'admin', 'middleware' => 'admin'], function(){
Route::get('/', function(){
return view('admin.index');
});
Route::get('/user', function(){
return view('admin.user');
});
});
});
我遇到了 Auth::user()
总是 returns null
的情况,这是因为我试图在控制器的构造函数中获取 User
。
我意识到您无法在控制器的构造函数中访问经过身份验证的用户,因为中间件还没有 运行。
作为替代方案,您可以直接在控制器的构造函数中定义基于闭包的中间件。
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);
});
}
}
我遇到了同样的问题,因为我没有设置 table 名称。
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'users';
我的Auth::user()
returnnull
在
- 我在数据库 中没有用户table
- 我没有 id 字段作为 table users 的主键
Route::middleware('auth:api')->group(function () {
Route::get('/details', 'UserController@details');
});
在你的控制器的构造函数中定义中间件,它就可以解决这个问题
public function __construct()
{
$this->middleware('auth:api');
}
只需在调用中包含您的身份验证中间件
$user = auth('middleware')->user()