真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

thinkphp6中怎么使用jwt認(rèn)證

本篇內(nèi)容主要講解“thinkphp6中怎么使用jwt認(rèn)證”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“thinkphp6中怎么使用jwt認(rèn)證”吧!

創(chuàng)新互聯(lián)為企業(yè)級(jí)客戶(hù)提高一站式互聯(lián)網(wǎng)+設(shè)計(jì)服務(wù),主要包括網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、App定制開(kāi)發(fā)、微信小程序定制開(kāi)發(fā)、宣傳片制作、LOGO設(shè)計(jì)等,幫助客戶(hù)快速提升營(yíng)銷(xiāo)能力和企業(yè)形象,創(chuàng)新互聯(lián)各部門(mén)都有經(jīng)驗(yàn)豐富的經(jīng)驗(yàn),可以確保每一個(gè)作品的質(zhì)量和創(chuàng)作周期,同時(shí)每年都有很多新員工加入,為我們帶來(lái)大量新的創(chuàng)意。 

thinkphp6 使用jwt

  1. 客戶(hù)端使用用戶(hù)名和密碼請(qǐng)求登錄

  2. 服務(wù)端收到請(qǐng)求,驗(yàn)證用戶(hù)名和密碼

  3. 驗(yàn)證成功后,服務(wù)端會(huì)簽發(fā)一個(gè)token,再把這個(gè)token返回給客戶(hù)端

  4. 客戶(hù)端收到token后可以把它存儲(chǔ)起來(lái),比如放到cookie中

  5. 客戶(hù)端每次向服務(wù)端請(qǐng)求資源時(shí)需要攜帶服務(wù)端簽發(fā)的token,可以在cookie或者h(yuǎn)eader中攜帶

  6. 服務(wù)端收到請(qǐng)求,然后去驗(yàn)證客戶(hù)端請(qǐng)求里面帶著的token,如果驗(yàn)證成功,就向客戶(hù)端返回請(qǐng)求數(shù)據(jù)

安裝 jwt 擴(kuò)展

composer require firebase/php-jwt

安裝之后在 vender 目錄下的 firebase 文件夾下

調(diào)用 JWT里面的 encode 和 decode方法進(jìn)行生成token和驗(yàn)證token

項(xiàng)目app 目錄下的 common.php全局文件使用的 ,做成了公共方法,由于我是多應(yīng)用的,所以就寫(xiě)在了api下面的common.php,大家可以根據(jù)自己需求適當(dāng)調(diào)整

首先 引入 JWT ,然后寫(xiě)兩個(gè)方法,生成驗(yàn)簽和驗(yàn)證token。

$key,        //簽發(fā)者 可以為空
        "aud"=>'',          //面象的用戶(hù),可以為空
        "iat"=>time(),      //簽發(fā)時(shí)間
        "nbf"=>time(),      //在什么時(shí)候jwt開(kāi)始生效
        "exp"=> time()+30,  //token 過(guò)期時(shí)間
        "data"=>[           //記錄的uid的信息
            'uid'=>$uid,
        ]
    );
    $jwt = JWT::encode($token, $key, "HS256");  //生成了 token
    return $jwt;}/**
 * 驗(yàn)證token
 * @param $token
 * @return array|int[]
 */function checkToken($token){
    $key='abcdefg';     //自定義的一個(gè)隨機(jī)字串用戶(hù)于加密中常用的 鹽  salt
    $res['status'] = false;
    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            = (array)$decoded;
        $res['status']  = 200;
        $res['data']    =(array)$arr['data'];
        return $res;

    } catch(\Firebase\JWT\SignatureInvalidException $e) { //簽名不正確
        $res['info']    = "簽名不正確";
        return $res;
    }catch(\Firebase\JWT\BeforeValidException $e) { // 簽名在某個(gè)時(shí)間點(diǎn)之后才能用
        $res['info']    = "token失效";
        return $res;
    }catch(\Firebase\JWT\ExpiredException $e) { // token過(guò)期
        $res['info']    = "token過(guò)期";
        return $res;
    }catch(Exception $e) { //其他錯(cuò)誤
        $res['info']    = "未知錯(cuò)誤";
        return $res;
    }}

使用jwt生成token

    /**
     * 使用jwt生成token字符串
     */
    public function setJwtToken()
    {
        $uid = input('uid'); // 接收生成token字符串 如:123
        $token = signToken($uid);
        // 生成字符串: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhYmNkZWZnIiwiYXVkIjoiIiwiaWF0IjoxNjQxNDUwMTU0LCJuYmYiOjE2NDE0NTAxNTcsImV4cCI6MTY0MTQ1NzM1NCwiZGF0YSI6eyJ1aWQiOiIxMjMifX0.I_GAkMsOhtEpIPkizCuQA-b9H6ovSovWx0AwAYI-b0s
        echo $token;die;
    }

    /**
     * 使用jwt驗(yàn)證token字符串
     */
    public function checkJwtToken()
    {
        $token  = input('token'); // 接收生成token字符串
        $result = checkToken($token);
        // Array ( [status] => 200 [data] => Array ( [uid] => 123 ) )
        print_r($result);die;
    }

創(chuàng)建 user 控制器

isPost()){
            $username = $request->param('username','','trim');
            $password = $request->param('password','','trim');

            //查詢(xún)數(shù)據(jù)庫(kù)
            $user = Db::name('user')->where('username',$username)->find();

            if (!$user){
                return json(['status' => 'fail','msg' => '用戶(hù)名不存在']);
            }
            if ($user['password']!==md5($password)){
                return json(['status' => 'fail','msg' => '密碼錯(cuò)誤']);
            }
            $getToken = $this->token($user);
            return json(['status' => 'success','msg' => '登陸成功','token' => $getToken]);
        }
    }
    public function token($user)
    {
        $uid = $user['username']; // 接收生成token字符串 如:123
        $token = signToken($uid);
        dd($token);
    }
    /**
     * 驗(yàn)證token
     */
    public function chToken()
    {
        $token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhYmNkZWZnIiwiYXVkIjoiIiwiaWF0IjoxNjQ4MDkwMDkyLCJuYmYiOjE2NDgwOTAwOTIsImV4cCI6MTY0ODA5MDEyMiwiZGF0YSI6eyJ1aWQiOiJcdTVmMjBcdTRlMDlcdTk4Y2UifX0.oJFpNcZ6stMymOCbD-meX0IPEIYLYNcwKxhMItF2cMw';
        $result = checkToken($token);
        // Array ( [status] => 200 [data] => Array ( [uid] => 123 ) )
        print_r($result);die;
    }}

用戶(hù)登錄成功返回給前端token,前端將token存儲(chǔ)起來(lái),在下次請(qǐng)求的時(shí)候頭部攜帶著這個(gè)token,后端接受token,在中間件中進(jìn)行驗(yàn)證

創(chuàng)建api中間件

header();
        //判讀請(qǐng)求頭里有沒(méi)有token
        if(!isset($header['token'])){
            return json(['code'=>440,'msg'=>'request must with token']);
        }
        $token = $header['token'];

        try {
            // token 合法
            $token = checkToken($token);
        }catch (\Exception $e){
            return json(['code'=>440,'msg'=>'invalid token']);
        }

        return $next($request);
    }}

到此,相信大家對(duì)“thinkphp6中怎么使用jwt認(rèn)證”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!


文章標(biāo)題:thinkphp6中怎么使用jwt認(rèn)證
分享地址:http://weahome.cn/article/pegcdi.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部