我們在這裡透過session取得了User的資料,
但是在這之前,
針對需要登入才能使用的頁面,
我們要先確認使用者是否已經登入,
如果還沒就轉到登入頁,
我們可以用php artisan make:middleware
指令來建立中介層.
當我們下指令
php artisan make:middleware AdminMiddleware
就會產生app/Http/Middleware/AuthUserAdminMiddleware.php這個檔案,
我們看一下檔案內容
<?php
namespace App\Http\Middleware;
use Closure;
class AdminMiddleware
{
public function handle($request, Closure $next)
{
return $next($request);
}
}
return $next($request);
表示照常做原本要做的動作,
我們在這裡加上登入的判斷
<?php
namespace App\Http\Middleware;
use Closure;
class AdminMiddleware
{
public function handle($request, Closure $next)
{
//預設不允許存取
$is_allow = false;
//取得會員編號
$user_id = session()->get('user_id');
if(!is_null($user_id))
{
//已登入,允許存取
$is_allow_access = true;
}
if(!$is_allow)
{
//若不允許存取,重新導向至首頁
return redirect()->to('/');
}
return $next($request);
}
}
如果登入就可以繼續進行下個步驟,
否則就回到首頁.
之後我們要在app/Http/Kernel.php
中註冊中介層
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
//應用程式共用中介層
protected $middleware = [
//省略
];
//路由中介層群組
protected $middlewareGroups = [
//省略
];
//應用程式中介層
protected $routeMiddleware = [
'auth.admin' => \App\Http\Middleware\AdminMiddleware::class,
//以下省略
];
}
$middleware是整個Laravel應用程式共用的中介層,
所有的請求都會經過這些中介層的處理.
$middlewareGroups是路由中介層群組,
所有的Web路由請求都會經過web的中介層群組處理,
所有的API路由請求都會經過api的中介層群組處理.
$routeMiddleware是個別的中介層,
分別指定不同的名稱給中介層類別.
我們將自定義的中介層加在$routeMiddleware底下,
我們可以在routes/web.php中呼叫中介層,
有兩種方式可以呼叫中介層,
一種是加在路由的後面
Route::group(['prefix' => 'admin'], function(){
//自我介紹相關
Route::group(['prefix' => 'user'], function(){
//自我介紹頁面
Route::get('/', 'AdminController@editUserPage')->middleware(['auth.admin']);
});
});
另外一種是把所有需要登入的頁面都透過中介層
Route::group(['middleware'=>['auth.admin']], function(){
Route::group(['prefix' => 'admin'], function(){
//自我介紹相關
Route::group(['prefix' => 'user'], function(){
//自我介紹頁面
Route::get('/', 'AdminController@editUserPage');
//處理自我介紹資料
Route::post('/', 'AdminController@editUserProcess');
});
//心情隨筆相關
Route::group(['prefix' => 'mind'], function(){
//心情隨筆列表頁面
Route::get('/', 'AdminController@mindListPage');
//新增心情隨筆資料
Route::get('/add', 'AdminController@addMindPage');
//處理心情隨筆資料
Route::post('/edit', 'AdminController@editMindProcess');
//單一資料
Route::group(['prefix' => '{mind_id}'], function(){
//編輯心情隨筆資料
Route::get('/edit', 'AdminController@editMindPage');
//刪除心情隨筆資料
Route::get('/delete', 'AdminController@deleteMindProcess');
});
});
});
});
這時候我們輸入 http://localhost:8915/admin/user 的時候(根目錄請根據自己實際的情況調整),
如果還沒有登入,
就會自動轉到首頁.