Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel 4: Two different view pages for a single URI based on auth status

I have recently got into developing with Laravel 4 and I had a question about routes.

For '/', I would like to have two different view pages based on the user's auth status.

If a user is logged in and is viewing '/', I would like to show them a view with admin controls and when a user is viewing '/' as a regular user without logging in, I would like to offer a general information view.

To accomplish this, I've been playing around with filter 'auth' and 'guest' but am having no luck. // app/routes.php

// route for logged in users
Route::get('/', array('before' => 'auth', function()
{
   return 'logged in!';
}));

// for normal users without auth
Route::get('/', function() 
{ 
    return 'not logged in!'; 
}));

The above code works to a point where the as a logged in user, I am able to display the proper response but after logging out, I cannot see the proper response as a regular user.

Perhaps this is something that should be handled in the controller? If someone could point me in the right direction, it would be really helpful.

like image 577
Kevin Jung Avatar asked Aug 04 '13 22:08

Kevin Jung


1 Answers

One (simple) option would be to use the Auth::check() function to see if they are logged in:

Route::get('/', function() 
{
    if (Auth::check())
    {
        return 'logged in!';
    }
    else
    {
        return 'not logged in!'; 
    }  
});

You would be able to use the same logic in the controller if you so wish.

EDIT - using filters

If you wanted to do this in the filter, you could use something like this:

Route::filter('auth', function()
{
    if (Auth::guest()) 
    {
        return Redirect::to('non-admin-home');
    }
});

and then defining a second route (or action in your controller) to handle the normal users. Though this would mean a different url for the page, which I don't think is what you want..

COMPLETE CONTROLLER-BASED ROUTING FLOW: (keeping routes.php clean)

routes.php

Route::controller('/', 'IndexController');

IndexController.php

class IndexController extends BaseController
{
    // HOME PAGE
    public function getIndex()
    {
        if (Auth::check())
        {
            return View::make('admin.home');
        }
        else
        {
            return View::make('user.home');
        }
    }
}
like image 68
msturdy Avatar answered Oct 19 '22 08:10

msturdy