Php Auth::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

我使用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。
谢谢你的建议

任何使用
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');
}