When user logs in and is authenticated, I use Auth::user()->username;
to show username of user on dashboard. However, for some reason when session expires the class Auth
doesn't seem to work and dashboard page throws error as trying to get property of non-object
for Auth::user()->username;
. How can I redirect the user back to the login page when he clicks any link or refreshes the page after the session has expired?
I tried the Authenticate.php middleware but it always redirects back to login page,whatever you put the credentials either correct or incorrect.However,when I don't use this middleware it logins the user.Am I missing something?
Route.php
<?php
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
/*
Actions Handled By Resource Controller
Verb Path Action Route Name
GET /photo index photo.index
GET /photo/create create photo.create
POST /photo store photo.store
GET /photo/{photo} show photo.show
GET /photo/{photo}/edit edit photo.edit
PUT/PATCH /photo/{photo} update photo.update
DELETE /photo/{photo} destroy photo.destroy
Adding Additional Routes To Resource Controllers
If it becomes necessary to add additional routes to a resource controller beyond the default resource routes, you should define those routes before your call to Route::resource:
Route::get('photos/popular', 'PhotoController@method');
Route::resource('photos', 'PhotoController');
*/
// Display all SQL executed in Eloquent
// Event::listen('illuminate.query', function($query)
// {
// var_dump($query);
// });
define('ADMIN','admin');
define('SITE','site');
Route::group(['namespace' => ADMIN], function () {
Route::get('/','UserController@showLogin');
});
////////////////////////////////////Routes for backend///////////////////////////////////////////////////
Route::group(['prefix' => ADMIN,'middleware' => 'auth'], function () {
Route::group(['namespace' => ADMIN], function () {
//Route::get('/','EshopController@products');
//sumit routes for user registration
//Route::resource('users','UserController');
Route::get('/users/destroy/{id}','UserController@destroy');
Route::get('UserProf','UserController@userProf');
Route::get('users','UserController@index');
Route::get('/users/create','UserController@create');
Route::get('/users/adminEdit/{id}','UserController@adminEdit');
Route::post('/users/adminUpdate','UserController@adminUpdate');
Route::post('/users/store','UserController@store');
Route::get('/users/edit/{id}','UserController@edit');
Route::post('/users/update/{id}','UserController@update');
//airlines route
Route::get('airlines','AirlinesController@index');
Route::get('/airlines/create','AirlinesController@create');
Route::post('/airlines/store','AirlinesController@store');
Route::get('/airlines/edit/{id}','AirlinesController@edit');
Route::post('/airlines/update','AirlinesController@update');
Route::get('/airlines/destroy/{id}','AirlinesController@destroy');
//end sumit routes
//flight routes
Route::get('flights','FlightController@index');
Route::get('showFlightBook','FlightController@showFlightBook');
Route::get('flights/create','FlightController@create');
Route::post('flights/store','FlightController@store');
Route::get('flights/book','FlightController@book');
Route::get('flights/edit/{id}','FlightController@edit');
Route::post('flights/update','FlightController@update');
Route::get('flights/destroy/{id}','FlightController@destroy');
//Route::resource('flight','FlightController');
//hotels route
Route::get('hotels','HotelsController@index');
Route::get('/hotels/create','HotelsController@create');
Route::post('/hotels/store','HotelsController@store');
Route::get('/hotels/edit/{id}','HotelsController@edit');
Route::post('/hotels/update','HotelsController@update');
Route::get('/hotels/destroy/{id}','HotelsController@destroy');
//end sumit routes
//book-hotel routes
Route::get('hotel-book','HotelBookController@index');
Route::get('showHotelBook','HotelBookController@showHotelBook');
Route::get('hotel-book/create','HotelBookController@create');
Route::post('hotel-book/store','HotelBookController@store');
Route::get('hotel-book/book','HotelBookController@book');
Route::get('hotel-book/edit/{id}','HotelBookController@edit');
Route::post('hotel-book/update','HotelBookController@update');
Route::get('hotel-book/destroy/{id}','HotelBookController@destroy');
//Route::resource('hotel','HotelController');
//close flight routes
//for admin login
//Route::get('initlogin','UserController@lgnPage');
Route::get('login','UserController@showLogin');
// Route::get('privilegeLogin','UserController@privilegeLogin');
// Route::post('privilegeCheck','UserController@privilegeCheck');
Route::post('login','UserController@doLogin');
Route::get('/dashboard','DashController@index');
Route::get('logout','UserController@doLogout');
//user login
//Route::get('userLogin','UserController@showUserLogin');
//Route::post('userLogin','UserController@doUserLogin');
Route::get('/userDashboard','DashController@userIndex');
Route::get('Logout','UserController@doUserLogout');
//password reset
Route::get('forget-pass','UserController@showReset');
//Route::get('home', 'PassResetEmailController@index');
});
});
Route::controllers([
'auth' => 'Auth\AuthController',
'password' => 'Auth\PasswordController',
]);
Authenticate.php:
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Contracts\Auth\Guard;
class Authenticate {
/**
* The Guard implementation.
*
* @var Guard
*/
protected $auth;
/**
* Create a new filter instance.
*
* @param Guard $auth
* @return void
*/
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($this->auth->guest())
{
if ($request->ajax())
{
return response('Unauthorized.', 401);
}
else
{
// return redirect()->guest('auth/login');
return redirect()->guest('/');
}
}
return $next($request);
}
}
All you have to do is just put this constructor at the top of the controller for your dashboard. It seems Laravel has a middleware that handles this already. At least I can confirm from 5.4 and up.
Create a middleware like this
Then Group the routes and protect them like this
Offcourse, in the routes you have to specify your links etc, it will only allow the user when he is authenticated and if not then login page will be shown
To make session redirect to your login just add ->middleware('auth') in your router files as shown below I am using laravel 5.3
Ex:- Route::post('controllerName','folderName\fileName@fnNmae')->middleware('auth');
Or visit https://laravel.com/docs/5.3/authentication
If session is expire then you can redirect to login like as open this file app/Exceptions/Handler.php add this code
If you want a middleware to be run during every HTTP request to your application, simply list the middleware class in the $middleware property of your app/Http/Kernel.php class. So, to protect every route from being accessed without authentication do this
it will redirect the user if not logged in. UPDATE Keep in mind that adding
auth
middleware as global will create redirect loop so avoid it.Or if you want specific routes to be protected then attach the middleware
auth
to that routeI think you are not attaching the auth middleware to your routes.