10
votes

Laravel framework- Why aren't I able to use Auth::user(), (to see if user has been logged in) in the controller of the laravel project. Is the Session not connected to the controller?

HomeController.php

 public function isauthorized(){
    if (Auth::user()){
        return View::make('home.basic')
            ->with('basic1', 'Authorized');
    }else{
        return View::make('home.basic')
            ->with('basic1', 'Not Authorized');
    }
}

My login system is working and the session is always set when logged in. When I call the function Auth::user() in the View or in routes.php, it is succesfull. But when I call the function in the controller, it is false. Help please.

9
Simple debugging. Use dd(Auth::user()); before your if. - Marwelln
Make sure that the app/storage directory is writable by the Web Server - Avinash Babu

9 Answers

21
votes

The problem is that you haven't included the Auth facade.

In your HomeController.php do:

use Illuminate\Support\Facades\Auth;
7
votes

Just add the following in your controller library.

use Illuminate\Support\Facades\Auth;
6
votes

If you're on Laravel 5.x, you'll probably have the auth middleware component. That might be the missing link.

I often use a pattern like this in my controllers:

public function __construct()
    {
        $this->middleware('auth');
        $this->user =  \Auth::user();
    }

then you can

if ($this->user .. )

or

if ($this->user->can('something')) with Entrust or similar

3
votes

You need to use the Auth facade in the controller;

add this line just before class definition.

use Auth;
2
votes

To see if a user is loged in don't use Auth::user(). Use Auth::check() instead.

if (Auth::check()){
    return View::make('home.basic')->with('user', Auth::user());
}
1
votes

I have the same problem. The solution I've found, is to not use \Auth::user() (it returns null). Instead, go through the guard like this: \Auth::guard('mrm')->User(). Obviously replace 'mrm' with whatever auth guard you are using.

This works, correctly returning the current user even when Auth::User returns null, and you can also use other methods on it - e.g. \Auth::guard('mrm')->check() instead of \Auth::check() (which always returns false).

No idea why the Auth facade doesn't work, but at least there is an alternative that does.

1
votes

in your controllers constructor:

public function __construct(){
    $this->middleware('auth');
}
0
votes

Use Auth::check()function to check if user is logged or not

0
votes

additionally, you can also use the auth() helper without adding the facade in your controller. (i.e. auth()->user()