I use Laravel 5.2 and have a problem with middleware. There is the code in the routes.php
use Illuminate\\Contracts\\Auth\\Access\\Gate; Route::group([
Route::middleware('auth:api')->group(function () {
Route::get('/details', 'UserController@details');
});
Define middle in the constructer of your controller and it will do the trick here
public function __construct()
{
$this->middleware('auth:api');
}
Any route that uses Auth()
must be encapsulated in the web
middleware. You're close, just move your Route::group(['prefix' => 'admin'], ...)
into the group above.
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');
});
});
});
I had the same problem because i did not set the table name.
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'users';
I faced a situation where Auth::user()
always returns null
, it was because I was trying to get the User
in a controller's constructor.
I realized that you can't access the authenticated user in your controller's constructor because the middleware has not run yet.
As an alternative, you can define a Closure based middleware directly in your controller's constructor.
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);
});
}
}
My Auth::user()
return null
in view when