php登陆项目,ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)
一、定義中間件
namespace app\middleware;
class Check
{
public function handle($request, \Closure $next)
{
if ($request->param('name') == 'think') {
return redirect('index/think');
}
return $next($request);
}
}
中間件類可以隨意命名,中間件的入口執(zhí)行方法必須是handle方法,而且第一個(gè)參數(shù)是Request對象,第二個(gè)參數(shù)是一個(gè)閉包。
二、前置/后置中間件
中間件是在請求具體的操作之前還是之后執(zhí)行,完全取決于中間件的定義本身。
下面是一個(gè)前置行為的中間件:
namespace app\middleware;
class Before
{
public function handle($request, \Closure $next)
{
// 添加中間件執(zhí)行代碼
return $next($request);
}
}
下面是一個(gè)后置行為的中間件:
namespace app\middleware;
class After
{
public function handle($request, \Closure $next)
{
$response = $next($request);
// 添加中間件執(zhí)行代碼
return $response;
}
}
三、注冊中間件
新版的中間件分為全局中間件、應(yīng)用中間件(多應(yīng)用模式下有效)、路由中間件以及控制器中間件四個(gè)組。執(zhí)行順序分別為:
全局中間件->應(yīng)用中間件->路由中間件->控制器中間件
1. 全局中間件
全局中間件在app目錄下面middleware.php文件中定義,使用下面的方式:
return [
\app\middleware\Auth::class
];
中間件的注冊應(yīng)該使用完整的類名,如果已經(jīng)定義了中間件別名(或者分組)則可以直接使用。全局中間件的執(zhí)行順序就是定義順序。
2. 應(yīng)用中間件
如果你使用了多應(yīng)用模式,則支持應(yīng)用中間件定義,你可以直接在應(yīng)用目錄下面增加middleware.php文件,定義方式和全局中間件定義一樣,只是只會(huì)在該應(yīng)用下面生效。
3. 路由中間件
最常用的中間件注冊方式是注冊路由中間件:
Route::rule('hello/:name','hello')->middleware(\app\middleware\Auth::class);
支持注冊多個(gè)中間件:
Route::rule('hello/:name','hello')->middleware([\app\middleware\Auth::class, \app\middleware\Check::class]);
4. 控制器中間件
支持為控制器定義中間件,只需要在控制器中定義middleware屬性,例如:
namespace app\controller;
class Index
{
protected $middleware = ['auth'];
public function index()
{
return 'index';
}
public function hello()
{
return 'hello';
}
}
當(dāng)執(zhí)行index控制器的時(shí)候就會(huì)調(diào)用auth中間件,一樣支持使用完整的命名空間定義。
5. 內(nèi)置中間件
中間件類
描述
think\middleware\AllowCrossDomain
跨域請求支持
think\middleware\CheckRequestCache
請求緩存
think\middleware\LoadLangPack
多語言加載
think\middleware\SessionInit Session
初始化
think\middleware\FormTokenCheck
表單令牌
這些內(nèi)置中間件默認(rèn)都沒有定義,你可以在應(yīng)用的middleware.php文件中、路由或者控制器中定義這些中間件,如果不需要使用的話,取消定義即可。
四、中間件使用 – 后臺(tái)登錄頁面跳轉(zhuǎn)流程
當(dāng)訪問后臺(tái)主頁的時(shí)候,如果已經(jīng)登錄(已記錄session)則可以進(jìn)入注意,否則返回登錄頁面;若訪問后臺(tái)登錄頁面,如果已經(jīng)登錄(已記錄session)則直接跳轉(zhuǎn)到主頁,否則進(jìn)入登錄頁面。
1. 創(chuàng)建Auth中間件
在admin應(yīng)用文件夾創(chuàng)建middleware文件夾,創(chuàng)建Auth.php中間件文件:
namespace app\admin\middleware;
use think\Response;
class Auth
{
public function handle($request, \Closure $next){
// 前置中間件
if(empty(session(config("admin.session_admin"))) && !preg_match("/login/",$request->pathinfo()) ){
return redirect(url('login/index'));
}
if(!empty(session(config("admin.session_admin"))) && preg_match("/login\/index/",$request->pathinfo())){
return redirect(url('index/index'));
}
$response = $next($request);
// 后置中間件
return $response;
}
public function end(Response $response){
}
}
admin.session_admin是在admin/config文件夾下配置文件定義的:
admin/config/admin.php
return [
'session_admin' => 'adminUser'
];
2. 注冊應(yīng)用中間件
在admin應(yīng)用目錄新建middleware.php:
return [
\think\middleware\SessionInit::class,
app\admin\middleware\Auth::class
];
本文同步分享在 博客“zy1281539626”(CSDN)。
如有侵權(quán),請聯(lián)系 support@oschina.cn 刪除。
本文參與“OSC源創(chuàng)計(jì)劃”,歡迎正在閱讀的你也加入,一起分享。
總結(jié)
以上是生活随笔為你收集整理的php登陆项目,ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: LeetCode(#118)————杨辉
 - 下一篇: 分级调节是调节机制吗_机制砂大热,5种制