[Day 34] 自我介绍後台及前台(三) - 建立中介层

建立中介层

我们在这里透过session取得了User的资料,
但是在这之前,
针对需要登入才能使用的页面,
我们要先确认使用者是否已经登入,
如果还没就转到登入页,

我们可以用php artisan make:middleware指令来建立中介层.

当我们下指令
php artisan make:middleware AdminMiddleware
https://ithelp.ithome.com.tw/upload/images/20201004/20105694qDJCnAC7FQ.png

就会产生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 的时候,
如果还没有登入,
就会自动转到首页.


<<:  系统分析师的养成之路—案例分享(3)

>>:  [Day 35] 自我介绍後台及前台(四) - 前台的首页

03 - Alacritty - 终端机

macOS 的预设终端机为 Terminal.app ,对於使用终端频率较少的一般使用者是十分足够的...

Leetcode: 210. Course Schedule II | 含C++笔记

Course Schedule I的延伸,这次要排出课程顺序。 思路 有大概想到去找node的顺序跟...

day04 Filebeat(二) 自定索引

在上一章节我们已经可以抓取log资料到Elasticsearch内,今天我们将在进一步的设定file...

[Angular] Day33. Communicating with backend services using HTTP

在现代的网页中绝大部分会需要与 server 互相沟通,无论是从 server 获取商品的资料用於显...

[LeetCode30] Day30 - END

教授说12点前要看到实验结果,但我组长看我不先发文,也想把我杀了,人真难做,我只好先来发文QQ 心得...