前言:php在使用接口時候很多時候都是需要帶token的,如果不對token進行校驗那么別人就能夠隨意編寫一個token進入你的接口拿數據,應該怎樣處理呢?
//生成token public function testT(){ //$key = "example_key2343534@#%$#^$&%^kprgokgdr"; $privateKey = file_get_contents('../config/openssl/privateKey.txt'); $exp = time() + 7200; $token = array( "iss" => "", "aud" => "", "iat" => time(),//簽發時間 //"nbf" => time()+10,//生效時間 'exp' => $exp,//過期時間 ); // $jwt = JWT::encode($token, $key); $jwt = JWT::encode($token, $privateKey, 'RS256'); halt($jwt); return json(['token'=>$jwt,'exp'=>date('Y-m-d H-i-s',$exp)]); }
//驗證token public function rosetoke(){ //halt($token); // dump($token); // dump($key); // halt(null); // $token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIiLCJhdWQiOiIiLCJpYXQiOjE1NDgyMDk5OTYsIm5iZiI6MTU0ODIxMDAwNiwiZXhwIjoxNTQ4MjE3MTk2fQ.k9yYHqgFj6VNXJOtAQD5BTxh7CW_o0qvfV3C3GRkNFw"; $publicKey = file_get_contents('../config/openssl/publicKey.txt'); $jwt = "nSU2y_yDVSxSVt31urSJbPocu99xRYghROhrrr5TrIYFKBegjKfzu5qYHm8dSZXkqYRv-qupY4uRwjR6G"; try{ $decoded = JWT::decode($jwt, $publicKey, array('RS256')); }catch(\Exception $e){ return false; } var_dump($decoded); halt($decoded);
由於多次嘗試解密用假的數據但是內部機制並沒有返回一個false而是返回了報錯的行數,這樣顯然是不符合我的要求,因此靈機一動用異常拋出改變內部機制,返回false值這樣就可以實現給到前台數據是false,問題解決