Php Auth::user()返回null
我使用Laravel5.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'); }); }); 始终返回null。Php Auth::user()返回null,php,authentication,laravel-5,middleware,Php,Authentication,Laravel 5,Middleware,我使用Laravel5.2,但中间件有问题。 下面是routes.php中的代码 use Illuminate\Contracts\Auth\Access\Gate; Route::group(['middleware' => 'web'], function () { Route::auth(); Route::get('/', 'HomeController@index'); }); Route::group(['prefi
谢谢你的建议 任何使用
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()
总是返回null
,这是因为我试图在控制器的构造函数中获取用户
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);
});
}
}
我意识到您无法访问控制器构造函数中经过身份验证的用户,因为中间件尚未运行
作为替代方案,您可以直接在控制器的构造函数中定义基于闭包的中间件
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);
});
}
}
我也有同样的问题,因为我没有设置表名
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'users';
我的Auth::user()
返回视图中的null
时
- 我在数据库中没有用户表
- 我没有id字段作为表用户的主键
在控制器的构造函数中定义中间件,它将在这里实现这一点
public function __construct()
{
$this->middleware('auth:api');
}
非常感谢,我花了很多时间来解决这个问题。在过去,我向每个模型添加了table属性,这解决了我的问题,并且我将所有流程都放在中间件回调中;
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'users';
Route::middleware('auth:api')->group(function () {
Route::get('/details', 'UserController@details');
});
public function __construct()
{
$this->middleware('auth:api');
}