web-dev-qa-db-ja.com

セッションの有効期限をログインにリダイレクトしますか?

ユーザーがログインして認証されると、Auth::user()->username;を使用してダッシュボードにユーザーのユーザー名を表示します。ただし、何らかの理由でセッションが期限切れになると、クラスAuthが機能していないように見え、ダッシュボードページはAuth::user()->username;に対してtrying to get property of non-objectとしてエラーをスローします。セッションの有効期限が切れた後にユーザーがリンクをクリックしたり、ページを更新したりしたときに、ユーザーをログインページにリダイレクトするにはどうすればよいですか?

Authenticate.phpミドルウェアを試しましたが、資格情報が正しいか間違っているかに関係なく、常にログインページにリダイレクトされます。ただし、このミドルウェアを使用しないと、ユーザーにログインします。何かが足りないのでしょうか。

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);
    }

}
5
Sumit

アプリケーションへのすべてのHTTPリクエスト中にミドルウェアを実行する場合は、app/Http /Kernel.phpクラスの$ middlewareプロパティにミドルウェアクラスをリストするだけです。したがって、認証なしですべてのルートがアクセスされないように保護するには、これを実行します

protected $middleware = [
        'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
        'Illuminate\Cookie\Middleware\EncryptCookies',
        'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
        'Illuminate\Session\Middleware\StartSession',
        'Illuminate\View\Middleware\ShareErrorsFromSession',
        'App\Http\Middleware\VerifyCsrfToken',
        'App\Http\Middleware\Authenticate',// add this line according to your namespace
    ];

ログインしていない場合はユーザーをリダイレクトします。[〜#〜] update [〜#〜]グローバルとしてauthミドルウェアを追加するとリダイレクトループが作成されるため、使用しないでください。

または、特定のルートを保護する場合は、ミドルウェアauthをそのルートに接続します

Route::get('admin/profile', ['middleware' => 'auth', function () {
    //
}]);

ルートに認証ミドルウェアを接続していないと思います。

2
Chaudhry Waqas

このようなミドルウェアを作成する

<?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('login');
            }
        }
        return $next($request);
    }
}

次に、ルートをグループ化し、このように保護します

Route::group(['middleware' => 'auth'], function()
{
    Route::get();
    Route::get();
    Route::get();
    Route::get();
}

オフコース、リンクなどを指定する必要があるルートでは、ユーザーが認証された場合にのみユーザーが許可され、認証されていない場合はログインページが表示されます

3
Meta Pakistani

セッションをログインにリダイレクトするには、以下に示すようにルーターファイルに-> middleware( 'auth')を追加するだけですlaravel 5.3

例:-Route :: post( 'controllerName'、 'folderName\fileName @ fnNmae')-> middleware( 'auth');

または、 https://laravel.com/docs/5.3/authentication にアクセスしてください

1
Dee

このコンストラクターをダッシュ​​ボードのコントローラーの上部に配置するだけです。 Laravelにはすでにこれを処理するミドルウェアがあるようです。少なくとも5.4以降で確認できます。

public function __construct()
{
    $this->middleware('auth');
}
1
Dwain B