国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

thinkphp5攔截驗(yàn)證token

這篇具有很好參考價(jià)值的文章主要介紹了thinkphp5攔截驗(yàn)證token。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

寫(xiě)一個(gè)BaseController 類

基本思路:
1、繼承一個(gè)公共基類,將驗(yàn)證相關(guān)代碼放在基類
2、根據(jù) 孩子類下的notNeedToken 來(lái)決定是否進(jìn)行驗(yàn)證
3、驗(yàn)證失敗后,直接響應(yīng)回來(lái)
這里需要封裝一個(gè)主要代碼:

 protected function response($data = [])
  {

    $type = $this->getResponseType();
    $response = Response::create($data, $type);
    throw new HttpResponseException($response);
  }

如果直接return 返回,是不會(huì)終止執(zhí)行的,而是會(huì)繼續(xù)執(zhí)行到指定的控制器,所以這里的方法仿造了$this->error() 以及 $this->success()方法。

全部代碼

<?php

namespace app\api\controller;

use think\Controller;
use think\exception\HttpResponseException;
use think\Request;
use think\Response;

class BaseController extends Controller
{
  protected $tokenError = ''; // 錯(cuò)誤信息
  protected $tokenInfo = null; // 解析出來(lái)的token信息
  protected $statusCode = 200;

  protected $notNeedToken = [];

  public function _initialize()
  {
    $this->checkToken();
    $this->statusCode = $this->tokenError == '' ? 200 : 401;
    if (!empty($this->tokenError)) {
      $this->response([
        'code' => 0,
        'msg' => $this->tokenError
      ]);
    }
  }

  // 檢查token
  public function checkToken()
  {

    $request = Request::instance();
    $path = $request->path();
    $tokenStr = $request->header('Authorization');

    do {
      //echo '所有路由都需要執(zhí)行' . $path;
      // 不在排除的路由列表當(dāng)中都需要進(jìn)行驗(yàn)證
      if (!in_array($path, $this->notNeedToken)) {
        if (empty($tokenStr)) {
          // 沒(méi)有傳遞token
          $this->tokenError = '請(qǐng)先登錄后操作';
          break;
        }

        [$a, $token] = explode(" ", $tokenStr);

        // 如果為空 直接返回錯(cuò)誤
        if (empty($token)) {
          $this->tokenError = '請(qǐng)先登錄后操作';
          break;
        }
        // 進(jìn)入驗(yàn)證操作
        $rst = checkToken($token);
        if ($rst['code'] == 2) {
          $this->tokenError = $rst['msg'];
          break;
        }

        // token本身還沒(méi)有過(guò)期
        $this->tokenInfo = $rst['data'];


        // 檢查數(shù)據(jù)庫(kù)表當(dāng)中是否已經(jīng)標(biāo)記為過(guò)期了(可能執(zhí)行了退出登錄了)
        $appUserToken = model('api/app_user_token');
        $rst =  $appUserToken::get([
          'user_id' =>   $this->tokenInfo->id,
          'token' =>   $token
        ]);


        // 不存在該信息
        if (empty($rst)) {
          $this->tokenError = '沒(méi)有該登錄信息';
          break;
        }

        if ($rst['is_overtime'] == 1) {
          $this->tokenError = '登錄已過(guò)期';
          break;
        }
      }
    } while (0);
  }

  protected function response($data = [])
  {

    $type = $this->getResponseType();
    $response = Response::create($data, $type);
    throw new HttpResponseException($response);
  }
}

控制器UserController文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-608295.html

class User extends BaseController
{
    //不需要驗(yàn)證token的接口
    protected $notNeedToken = [
        'api/user/reg',
        'api/user/login'
    ];
}

到了這里,關(guān)于thinkphp5攔截驗(yàn)證token的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Thinkphp5.x全漏洞復(fù)現(xiàn)分析

    Thinkphp5.x全漏洞復(fù)現(xiàn)分析

    我們可以把namespace理解為一個(gè)單獨(dú)的空間,事實(shí)上它也就是一個(gè)空間而已,子命名空間那就是空間里再劃分幾個(gè)小空間,舉個(gè)例子: 當(dāng)有多個(gè)子命名空間有相同名稱類時(shí),不指定使用哪個(gè)命名空間的情況下取最后定義的命名空間中的類,比如上面的 dog 取的時(shí) dogC 中的類,在

    2024年04月22日
    瀏覽(25)
  • ThinkPHP5.0.23 遠(yuǎn)程代碼執(zhí)行漏洞

    ThinkPHP5.0.23 遠(yuǎn)程代碼執(zhí)行漏洞

    ThinkPHP 是一款運(yùn)用極廣的 PHP 開(kāi)發(fā)框架。其 5.0.23 以前的版本中,獲取 method 的方法中沒(méi)有正確處理方法名,導(dǎo)致攻擊者可以調(diào)用 Request 類任意方法并構(gòu)造利用鏈,從而導(dǎo)致遠(yuǎn)程代碼執(zhí)行漏洞。 百度漏洞 獲得exp 路徑: POST傳參 我用的是hackbar,用burpsuite也行。 burp操作方法 抓包

    2024年02月11日
    瀏覽(23)
  • ThinkPHP5.0.21遠(yuǎn)程命令執(zhí)行漏洞

    ThinkPHP5.0.21遠(yuǎn)程命令執(zhí)行漏洞

    漏洞出現(xiàn)的背景 : ThinkPHP是?款運(yùn)?極?的PHP開(kāi)發(fā)框架。 其5.0.23以前的版本中,獲取method的?法中沒(méi)有正確處理?法名, 導(dǎo)致攻擊者可以調(diào)?Request類任意?法并構(gòu)造利?鏈,從?導(dǎo)致遠(yuǎn)程代碼執(zhí)?漏洞。 由于ThinkPHP5框架對(duì)控制器名沒(méi)有進(jìn)??夠的安全檢測(cè),導(dǎo)致在沒(méi)有開(kāi)

    2024年02月04日
    瀏覽(23)
  • ThinkPHP5系列遠(yuǎn)程代碼執(zhí)行漏洞復(fù)現(xiàn)(詳細(xì))

    ThinkPHP5系列遠(yuǎn)程代碼執(zhí)行漏洞復(fù)現(xiàn)(詳細(xì))

    ThinkPHP是一款運(yùn)用極廣的PHP開(kāi)發(fā)框架。其版本5中,由于框架對(duì)控制器名沒(méi)有進(jìn)行足夠的檢測(cè),會(huì)導(dǎo)致在沒(méi)有開(kāi)啟強(qiáng)制路由的情況下可執(zhí)行任意方法,從而導(dǎo)致遠(yuǎn)程命令執(zhí)行漏洞。 漏洞危害 啟動(dòng)環(huán)境 切換到/thinkphp/5.0.23-rce# 目錄下 將version改為2,保存并退出 接著執(zhí)行 此時(shí)環(huán)境

    2024年02月12日
    瀏覽(29)
  • 知識(shí)筆記(九十)———ThinkPHP5中時(shí)間查詢的方法

    使用 where 方法 where 方法支持時(shí)間比較,例如: 第三個(gè)參數(shù)可以傳入任何有效的時(shí)間表達(dá)式,會(huì)自動(dòng)識(shí)別你的時(shí)間字段類型,支持的時(shí)間類型包括 timestamps 、 datetime 、 date 和 int 。 使用 whereTime 方法 whereTime 方法提供了日期和時(shí)間字段的快捷查詢,示例如下: 還提供了更方便

    2024年01月21日
    瀏覽(19)
  • thinkphp5.0.24反序列化漏洞分析

    thinkphp5.0.24反序列化漏洞分析

    thinkphp5框架: thinkphp5的入口文件在 publicindex.php ,訪問(wèn) 反序列化起點(diǎn) 寫(xiě)一個(gè)反序列化入口點(diǎn) 全局搜索 __destruct() 函數(shù) thinkphp_5.0.24thinkphplibrarythinkprocesspipesWindows.php 中的 __destruct() 函數(shù),調(diào)用了removeFiles() 跟進(jìn)removeFiles(),第163行的file_exists可以觸發(fā) __toString 方法 全局搜索

    2023年04月08日
    瀏覽(31)
  • windows本地使用docker+nginx+mysql部署thinkphp5

    windows本地使用docker+nginx+mysql部署thinkphp5

    前言: Docker是一個(gè)開(kāi)源的容器化平臺(tái),可以將應(yīng)用程序及其依賴項(xiàng)打包到一個(gè)可移植的容器中,并在不同的環(huán)境中運(yùn)行。容器是一個(gè)獨(dú)立、可移植、可復(fù)制的軟件單元,其中包含應(yīng)用程序、運(yùn)行時(shí)環(huán)境、系統(tǒng)工具和庫(kù)。Docker利用容器的輕量級(jí)和快速啟動(dòng)的特性,提供了一種更

    2024年04月25日
    瀏覽(24)
  • Thinkphp5.0.23 rce(遠(yuǎn)程代碼執(zhí)行)的漏洞復(fù)現(xiàn)

    Thinkphp5.0.23 rce(遠(yuǎn)程代碼執(zhí)行)的漏洞復(fù)現(xiàn)

    框架介紹: ThinkPHP是一款運(yùn)用極廣的PHP開(kāi)發(fā)框架。 漏洞引入: 其5.0.23以前的版本中,獲取method的方法中沒(méi)有正確處理方法名,導(dǎo)致攻擊者可以調(diào)用Request類任意方法并構(gòu)造利用鏈,從而導(dǎo)致遠(yuǎn)程代碼執(zhí)行漏洞。 1、訪問(wèn)靶機(jī)地址+端口號(hào) 進(jìn)入首頁(yè) 2、Burp抓包修改傳參方式為Po

    2024年02月06日
    瀏覽(26)
  • thinkphp5實(shí)現(xiàn)ajax圖片上傳,壓縮保存到服務(wù)器

    thinkphp壓縮圖片插件官方地址 使用Composer安裝ThinkPHP5的圖像處理類庫(kù): composer require topthink/think-image 另外一種方法,傳遞base64圖片,提交圖片數(shù)據(jù)的字符串

    2024年02月07日
    瀏覽(28)
  • thinkphp5框架的model支持多地區(qū)數(shù)據(jù)庫(kù)切換

    一般情況下,都是在model中指定一個(gè)數(shù)據(jù)庫(kù)連接參數(shù)即可。但某些情況下,相同的庫(kù)表會(huì)在不同地區(qū)都有部署,這個(gè)時(shí)候需要按地區(qū)進(jìn)行切換(只有一個(gè)model情況下)。 Model層代碼 使用A地區(qū)的數(shù)據(jù)庫(kù): $model = new A(); 使用B地區(qū)的數(shù)據(jù)庫(kù): $model = new B(); 需要更改地方:config.ph

    2024年02月12日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包