加token的目的,不言而喻,為了api接口的安全性。等等 ~~~
先聲明一些驗(yàn)證規(guī)則
protected $request; // 用來處理參數(shù) protected $validater; // 用來驗(yàn)證數(shù)據(jù)/參數(shù) protected $params; // 過濾后符合要求的參數(shù) protected $rules = array( "Login" => array( "login_join" => array( "mobile" => ["require","max" => 11], "password" => "require|length:6,18", ), ), ); /** * 構(gòu)造函數(shù) * 初始化檢測(cè)請(qǐng)求時(shí)間,簽名等 */ public function _initialize() { parent::_initialize(); // 獲取參數(shù) $this->request = Request::instance(); //驗(yàn)證是否超時(shí) $this->check_time($this->request->only(["timestamp"])); //驗(yàn)證 $this->check_token($this->request->param()); //驗(yàn)證參數(shù) $this->params = $this->check_params($this->request->except(["timestamp","token"])); }
定義個(gè)返回?cái)?shù)據(jù)的方法
/** * api 數(shù)據(jù)返回 * @param [int] $code [結(jié)果碼 200:正常/4**數(shù)據(jù)問題/5**服務(wù)器問題] * @param [string] $msg [接口要返回的提示信息] * @param [array] $data [接口要返回的數(shù)據(jù)] * @return [string] [最終的json數(shù)據(jù)] */ public function return_msg($code, $msg = "", $data = []) { $return_data["code"] = $code; $return_data["msg"] = $msg; $return_data["data"] = $data; echo json_encode($return_data); die; }
驗(yàn)證是否超時(shí)
/** * 驗(yàn)證請(qǐng)求是否超時(shí) * @param [array] $arr [包含時(shí)間戳的參數(shù)數(shù)組] * @return [json] [檢測(cè)結(jié)果] */ public function check_time($arr) { if (!isset($arr["timestamp"]) || intval($arr["timestamp"]) <= 1) { $this->return_msg(1,"Timestamp error"); } if (time() - intval($arr["timestamp"]) > 300) { $this->return_msg(1,"Request timeout"); } }
驗(yàn)證token
/** * 驗(yàn)證token(防止篡改數(shù)據(jù)) * @param [array] $arr [全部請(qǐng)求參數(shù)] * @return [json] [token驗(yàn)證結(jié)果] */ public function check_token($arr) { /*********** api傳過來的token ***********/ if (!isset($arr["token"]) || empty($arr["token"])) { $this->return_msg(1,"Token can`t be empty"); } $app_token = $arr["token"]; // api傳過來的token /*********** 服務(wù)器端生成token ***********/ unset($arr["token"]); $service_token = ""; foreach ($arr as $key => $value) { $service_token .= md5($value); } $service_token = md5(config("app.login_begin"). $service_token .config("app.login_end")); // 服務(wù)器端即時(shí)生成的token /*********** 對(duì)比token,返回結(jié)果 ***********/ if ($app_token !== $service_token) { $this->return_msg(1,"Token is not correct"); } }
驗(yàn)證參數(shù)
/** * 驗(yàn)證參數(shù) 參數(shù)過濾 * @param [array] $arr [除time和token外的所有參數(shù)] * @return [return] [合格的參數(shù)數(shù)組] */ public function check_params($arr) { /*********** 獲取參數(shù)的驗(yàn)證規(guī)則 ***********/ $rule = $this->rules[$this->request->controller()][$this->request->action()]; /*********** 驗(yàn)證參數(shù)并返回錯(cuò)誤 ***********/ $this->validater = new Validate($rule); if (!$this->validater->check($arr)) { $this->return_msg(1,$this->validater->getError()); } /*********** 如果正常,通過驗(yàn)證 ***********/ return $arr; }
可以登陸后將token存儲(chǔ)起來,也可以每次請(qǐng)求都驗(yàn)證token.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28744.html
摘要:合適和夠用是最完美的追求。比如從頁(yè)面去請(qǐng)求的資源。它允許瀏覽器向跨源服務(wù)器,發(fā)出請(qǐng)求,從而克服了只能同源使用的限制。定義在中的路由都是無(wú)狀態(tài)的,并且會(huì)應(yīng)用中間件組。 關(guān)于作者 程序開發(fā)人員,不拘泥于語(yǔ)言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和夠用是最完美的追求。 個(gè)人網(wǎng)站:http://www.linganm...
摘要:合適和夠用是最完美的追求。比如從頁(yè)面去請(qǐng)求的資源。它允許瀏覽器向跨源服務(wù)器,發(fā)出請(qǐng)求,從而克服了只能同源使用的限制。定義在中的路由都是無(wú)狀態(tài)的,并且會(huì)應(yīng)用中間件組。 關(guān)于作者 程序開發(fā)人員,不拘泥于語(yǔ)言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和夠用是最完美的追求。 個(gè)人網(wǎng)站:http://www.linganm...
摘要:合適和夠用是最完美的追求。比如從頁(yè)面去請(qǐng)求的資源。它允許瀏覽器向跨源服務(wù)器,發(fā)出請(qǐng)求,從而克服了只能同源使用的限制。定義在中的路由都是無(wú)狀態(tài)的,并且會(huì)應(yīng)用中間件組。 關(guān)于作者 程序開發(fā)人員,不拘泥于語(yǔ)言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和夠用是最完美的追求。 個(gè)人網(wǎng)站:http://www.linganm...
摘要:對(duì)了,在這之前,首先要祝大家端午節(jié)快樂嘎嘎正文切入正題。其實(shí)在接入之前,我就有點(diǎn)范嘀咕,客戶端不會(huì)拿不到吧果然怕什么來什么,安卓那邊告訴我錯(cuò)誤,取不到值。和安卓那邊溝通,他們表示框架中可以模擬瀏覽器行為,實(shí)現(xiàn)的自動(dòng)發(fā)送。 寫在前面 時(shí)間:2017-05-29 7:30 距離上篇文章發(fā)布已經(jīng)一個(gè)多月了,本來自己的計(jì)劃是一周一記,怎么就變成月記了呢?最近工作的事情忙的焦頭爛額,當(dāng)然也不能...
閱讀 1233·2021-11-23 09:51
閱讀 678·2021-11-19 09:40
閱讀 1337·2021-10-11 10:58
閱讀 2347·2021-09-30 09:47
閱讀 3726·2021-09-22 15:55
閱讀 2160·2021-09-03 10:49
閱讀 1250·2021-09-03 10:33
閱讀 698·2019-08-29 17:12