11

In previous versions of Laravel, in the controllers which I needed to access logged user in all the methods I used to do something like this:

class DashboardController extends Controller
{
    private $user ;
    function __construct(Request $request)
    {
        $this->middleware('auth');
        $this->user = \Auth::user();
    }

    function func_1(){
      $objects = Objects::where('user_id' , $this->user->id )->get();
    }
    function func_2(){
      $objects = Objects::where('user_id' , $this->user->id )->get();
    }
    function func_3(){
      $objects = Objects::where('user_id' , $this->user->id )->get();
    }

Mostly because I don't like the default syntax \Auth::user() but after upgrading to 5.4 this doesn't work anymore and I get null from $this->user

It works fine in other methods though. Basically \Auth::user() return null in the __construct method but works fine in the other functions.

Tuim
  • 2,491
  • 1
  • 14
  • 31
hretic
  • 999
  • 9
  • 36
  • 78
  • Possible duplicate of [$request->session didn't work in Laravel 5.3 resource controller](https://stackoverflow.com/questions/40363009/request-session-didnt-work-in-laravel-5-3-resource-controller) – OuailB Jul 12 '17 at 11:02

2 Answers2

31

As the doc says :

In previous versions of Laravel, you could access session variables or the authenticated user in your controller's constructor. This was never intended to be an explicit feature of the framework. In Laravel 5.3, you can't access the session or authenticated user in your controller's constructor because the middleware has not run yet.

So try this :

public function __construct()
{
    $this->middleware('auth');
    $this->middleware(function ($request, $next) {
        $this->user = Auth::user();

        return $next($request);
    });
}
Maraboc
  • 10,550
  • 3
  • 37
  • 48
1

You Have To define Auth method before you load your class as you use your namespace.See the example below:

namespace App\Http\Controllers\Admin;

use Illuminate\Support\Facades\Input;
use Auth;

class DashboardController extends Controller
{
    private $user ;
    function __construct(Request $request)
    {
        $this->middleware('auth');
        $this->user = Auth::user();
    }

    function func_1(){
      $objects = Objects::where('user_id' , $this->user->id )->get();
    }
    function func_2(){
      $objects = Objects::where('user_id' , $this->user->id )->get();
    }
    function func_3(){
      $objects = Objects::where('user_id' , $this->user->id )->get();
    }

And After you can clean your cache if required. php artisan config:cache