#15 Middleware (restricting access to pages)
Middleware는 말 그대로 중간에서 일을 처리하는 것을 의미한다.
Middleware를 이용하여 로그인 접근제한을 만들어보자.
우선 Middleware를 만들어보자. 터미널로 들어가서 다음과 같은 명령어를 입력한다.
php artisan make:middleware AuthenticatedMiddleware
그 다음 app/Http/Middleware를 확인하면 방금 생성된 AuthenticatedMiddleware.php를 확인할 수 있다.
로그인이 안되어있는 상태이면 로그인페이지로 리다이렉트를 시켜야 하므로 다음과 같은 코드를 작성한다.
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class AuthenticatedMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(Auth::check()) {
return $next($request);
}
//리다이렉션
return redirect('/login');
}
}
하지만 이걸로 끝난게 아니다. 실제로 Kernel단에서도 똑같은 미들웨어 처리를 하도록 우리가 선언을 해줘야 된다. Http/kernel.php로 접근을 하여 다음과 같은 코드를 작성한다.
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
//추가된 코드
'authenticated' => \App\Http\Middleware\AuthenticatedMiddleware::class,
];
이렇게 하면authenticated라는 미들웨어를 사용할 수 있게 된다. 그러면 마지막으로 web.php에서 접근권한을 해당 뷰에 씌워보자.
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', 'PagesController@index');
/*미들웨어*/
Route::get('users','UsersController@index')->middleware('authenticated');
Route::get('users/create', ['uses' => 'UsersController@create']);
Route::post('users', ['uses' => 'UsersController@store']);
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
/*미들웨어*/
Route::get('blade','PagesController@blade')->middleware('authenticated');
/*Practice*/
Route::get('test','TestController@index');
미들웨어가 생겼다. 이제 그냥 /users나 /blade로 접근을 할려면 로그인을 해야된다.