建立中介层
我们在这里透过session取得了User的资料,
但是在这之前,
针对需要登入才能使用的页面,
我们要先确认使用者是否已经登入,
如果还没就转到登入页,
我们可以用php artisan make:middleware
指令来建立中介层.
当我们下指令
php artisan make:middleware AdminMiddleware
就会产生app/Http/Middleware/AuthUserAdminMiddleware.php这个档案,
我们看一下档案内容
<?phpnamespace App\Http\Middleware;use Closure;class AdminMiddleware{ public function handle($request, Closure $next) { return $next($request); }}
return $next($request);
表示照常做原本要做的动作,
我们在这里加上登入的判断
<?phpnamespace 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
中注册中介层
<?phpnamespace 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 的时候,
如果还没有登入,
就会自动转到首页.