上海網(wǎng)站建設(shè)公司 紅威網(wǎng)站制作免費(fèi)
thinkphp8 從入門(mén)到放棄
- 引言 thinkphp* 大道至簡(jiǎn)
- 一、 thinkphp8 安裝
- 安裝Composer
- thinkphp 安裝命令(tp-項(xiàng)目名稱(chēng))
- 多應(yīng)用安裝(一個(gè)項(xiàng)目不會(huì)只有一個(gè)應(yīng)用)
- 安裝完文件目錄如下
- 本地部署配置偽靜態(tài)
- 好了項(xiàng)目可以run
- 二、架構(gòu)
- 服務(wù)(Service)
- 門(mén)面(Facade)
- token 創(chuàng)建(使用php-jwt)
引言 thinkphp* 大道至簡(jiǎn)
感謝thinkphp 開(kāi)發(fā)團(tuán)隊(duì),多年的努力 一直在更新。
TP8 看云手冊(cè)-點(diǎn)擊進(jìn)入看云
一、 thinkphp8 安裝
安裝Composer
訪問(wèn)Composer官方網(wǎng)站(https://getcomposer.org/),下載適合您操作系統(tǒng)的安裝程序。
運(yùn)行安裝程序:Windows: 雙擊下載的composer-setup.exe文件,然后按照向?qū)Р僮鳌?/p>
thinkphp 安裝命令(tp-項(xiàng)目名稱(chēng))
composer create-project topthink/think tp(項(xiàng)目名稱(chēng)自己定義即可)
多應(yīng)用安裝(一個(gè)項(xiàng)目不會(huì)只有一個(gè)應(yīng)用)
如果要使用多應(yīng)用模式,你需要安裝多應(yīng)用模式擴(kuò)展think-multi-app。
composer require topthink/think-multi-app
安裝完文件目錄如下
本地部署配置偽靜態(tài)
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>
好了項(xiàng)目可以run
二、架構(gòu)
服務(wù)(Service)
負(fù)責(zé)具體的業(yè)務(wù)邏輯實(shí)現(xiàn),將原本控制器的負(fù)責(zé)流程按模塊拆分為一個(gè)個(gè)小的服務(wù),方便給控制器層組合調(diào)用,一般不要跨模塊調(diào)用服務(wù),服務(wù)中可以調(diào)用本模塊的倉(cāng)庫(kù)層方法
門(mén)面(Facade)
token 創(chuàng)建(使用php-jwt)
PHP JWT(JSON Web Token)是一種用于身份驗(yàn)證和授權(quán)的開(kāi)放標(biāo)準(zhǔn)。JWT是一個(gè)包含有關(guān)用戶或?qū)嶓w身份信息的安全令牌,它由三部分組成:頭部(Header)、載荷(Payload)和簽名(Signature)。
為什么不建議你使用 JWT
JWT 的生成和解碼都不涉及到存儲(chǔ)(對(duì) MySQL 或者 Redis 的訪問(wèn)獲取),所以如果你存在拉黑或禁止某生成的令牌,則 JWT 不適合你的業(yè)務(wù)。
因?yàn)?#xff0c;JWT 不涉及存儲(chǔ),如果涉及,那就不是 JWT。
千萬(wàn),不要為了用而用。
composer require firebase/php-jwt
安裝完如下圖:
use \Firebase\JWT\JWT;
use \Firebase\JWT\Key;//生成驗(yàn)簽
function signToken($uid, $type)
{$key = Config::get('app.salt') . $type;//這里是自定義的一個(gè)隨機(jī)字串,應(yīng)該寫(xiě)在config文件中的,解密時(shí)也會(huì)用,相當(dāng) 于加密中常用的 鹽 salt$token = array("iss" => $key, //簽發(fā)者 可以為空"aud" => '', //面象的用戶,可以為空"iat" => time(), //簽發(fā)時(shí)間"nbf" => time() + 3, //在什么時(shí)候jwt開(kāi)始生效 (這里表示生成100秒后才生效)"exp" => time() + 86400, //token 過(guò)期時(shí)間"data" => [ //記錄的userid的信息,這里是自已添加上去的,如果有其它信息,可以再添加數(shù)組的鍵值對(duì)'uid' => $uid,'type' => $type]);$jwt = JWT::encode($token, $key, "HS256"); //根據(jù)參數(shù)生成了 tokenreturn $jwt;
}//驗(yàn)證token
function checkToken($token, $type)
{$key = Config::get('app.salt') . $type;$status = array("code" => -1);try {JWT::$leeway = 60;//當(dāng)前時(shí)間減去60,把時(shí)間留點(diǎn)余地$decoded = JWT::decode($token, new Key($key, 'HS256')); //HS256方式,這里要和簽發(fā)的時(shí)候?qū)?yīng)$arr = json_decode(json_encode($decoded), 1);$res['code'] = 1;$res['data'] = $arr['data'];return $res;} catch (\Firebase\JWT\SignatureInvalidException $e) { //簽名不正確$status['msg'] = "簽名不正確";return $status;} catch (\Firebase\JWT\BeforeValidException $e) { // 簽名在某個(gè)時(shí)間點(diǎn)之后才能用$status['msg'] = "token失效";return $status;} catch (\Firebase\JWT\ExpiredException $e) { // token過(guò)期$status['msg'] = "token失效";return $status;} catch (Exception $e) { //其他錯(cuò)誤$status['msg'] = "未知錯(cuò)誤";return $status;}
}