91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JWT中如何使用axios+PHP實現登錄認證

發布時間:2021-09-28 10:43:45 來源:億速云 閱讀:141 作者:小新 欄目:開發技術

小編給大家分享一下JWT中如何使用axios+PHP實現登錄認證,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

      HTML

      我們的HTML結構是這樣的:一個登錄表單,供用戶輸入用戶名和密碼,以及提交按鈕;一個是登錄成功后的顯示信息。

      <script src="https://cdn.bootcss.com/axios/0.17.1/axios.min.js"></script>

      按照流程,1.提交登錄表單,發送用戶名和密碼到PHP后端,2.后端驗證成功后,會發送一個token給前端,3.前端再拿這個token去請求需要用戶權限訪問,4.后端驗證toen,鑒權,返回相應結果。下面的js代碼實現了1,3兩步。

      <script>    document.querySelector('#sub-btn').onclick = function() {    let username = document.querySelector('#username').value;    let password = document.querySelector('#password').value;       var params = new URLSearchParams();    params.append('user', username);    params.append('pass', password);    axios.post(        'user.php?action=login',         params    )    .then((response) => {        if (response.data.result === 'success') {            // 本地存儲token            localStorage.setItem('jwt', response.data.jwt);            // 把token加入header里            axios.defaults.headers.common['X-token'] = response.data.jwt;            axios.get('user.php').then(function(response) {                if (response.data.result === 'success') {                    document.querySelector('#showpage').style.display = 'none';                    document.querySelector('#user').style.display = 'block';                    document.querySelector('#uname').innerHTML = response.data.info.data.username;                } else {                }            });        } else {            console.log(response.data.msg);        }    })    .catch(function (error) {        console.log(error);    });}</script>

      很顯然,當登錄成功后,立馬使用本地存儲token,然后把這個token放在請求頭header里,再次去請求后端另一個用戶信息接口,如果成功了就顯示用戶信息。

      如果要退出登錄,我們不需要再次去請求后端接口,直接前端清空本地存儲就OK了。

      document.querySelector('#logout').onclick = function() {    localStorage.removeItem('jwt');    document.querySelector('#showpage').style.display = 'block';    document.querySelector('#user').style.display = 'none';}

      登錄成功后,當我們刷新頁面(再次請求需要登錄后才能訪問的頁面),需要進行判斷,判斷本地存儲中是否有token,如果有token,那就拿去給后端接口驗證下token是否合法,如果沒問題就顯示用戶相關信息,如果驗證失敗,那可能是token過去或者偽造的token等原因。

      let jwt =  localStorage.getItem('jwt');if (jwt) {    axios.defaults.headers.common['X-token'] = jwt;    axios.get('user.php')    .then(function (response) {        if (response.data.result === 'success') {            document.querySelector('#showpage').style.display = 'none';            document.querySelector('#user').style.display = 'block';            document.querySelector('#uname').innerHTML = response.data.info.data.username;        } else {            document.querySelector('#showpage').style.display = 'block';            console.log(response.data.msg);        }    })    .catch(function (error) {        console.log(error);    });} else {    document.querySelector('#showpage').style.display = 'block';}

      PHP

      后端我們使用了一個專門的JWT庫:php-jwt

      使用composer安裝php-jwt,接收到登錄用戶名和密碼后,PHP驗證用戶名和密碼是否正確(實際開發中應該結合數據庫,從數據庫里拿用戶名和密碼比對,本實例為了演示只做簡單驗證),如果用戶名和密碼準確無誤,那么就簽發token,在token中,我們可以定義token的簽發者、過期時間等等,并返回給前端。注意在簽發token時,我們需要定義一個密鑰,這個密鑰是一個私鑰,實際應用中是保密的不可告訴別人。

      require 'vendor/autoload.php';use FirebaseJWTJWT;define('KEY', '1gHuiop975cdashyex9Ud23ldsvm2Xq'); //密鑰$res['result'] = 'failed';$action = isset($_GET['action']) ? $_GET['action'] : '';if ($action == 'login') {    if ($_SERVER['REQUEST_METHOD'] == 'POST') {        $username = htmlentities($_POST['user']);        $password = htmlentities($_POST['pass']);        if ($username == 'demo' && $password == 'demo') { //用戶名和密碼正確,則簽發tokon            $nowtime = time();            $token = [                'iss' => 'http://www.xuebuyuan.com', //簽發者                'aud' => 'http://www.xuebuyuan.com', //jwt所面向的用戶                'iat' => $nowtime, //簽發時間                'nbf' => $nowtime + 10, //在什么時間之后該jwt才可用                'exp' => $nowtime + 600, //過期時間-10min                'data' => [                    'userid' => 1,                    'username' => $username                ]            ];            $jwt = JWT::encode($token, KEY);            $res['result'] = 'success';            $res['jwt'] = $jwt;        } else {            $res['msg'] = '用戶名或密碼錯誤!';        }    }    echo json_encode($res);} else {    $jwt = isset($_SERVER['HTTP_X_TOKEN']) ? $_SERVER['HTTP_X_TOKEN'] : '';    if (empty($jwt)) {        $res['msg'] = 'You do not have permission to access.';        echo json_encode($res);        exit;    }    try {        JWT::$leeway = 60;        $decoded = JWT::decode($jwt, KEY, ['HS256']);        $arr = (array)$decoded;        if ($arr['exp']

      用戶每次請求都要帶上后端簽發的token,后端獲取請求中的token,PHP中使用$_SERVER['HTTP_X_TOKEN']就可以獲取token值。這個X_TOKEN就是在我們前端的請求header頭信息中。

      然后PHP拿到這個token后,解密分析token值,返回給前端即可。

以上是“JWT中如何使用axios+PHP實現登錄認證”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

察隅县| 塔城市| 鹤岗市| 商城县| 连云港市| 西畴县| 安岳县| 望江县| 乳源| 仙桃市| 庆城县| 江西省| 沙雅县| 靖江市| 田阳县| 东乌| 涞水县| 石首市| 古丈县| 天等县| 简阳市| 江油市| 息烽县| 昭觉县| 博乐市| 阿坝县| 蚌埠市| 塔河县| 藁城市| 新源县| 巩义市| 翼城县| 囊谦县| 德昌县| 福鼎市| 乌拉特中旗| 扎赉特旗| 东兰县| 金平| 宁津县| 牟定县|