加token的目的,不言而喻,为了api接口的安全性。等等 ~~~
先声明一些验证规则
protected $request; // 用来处理参数 protected $validater; // 用来验证数据/参数 protected $params; // 过滤后符合要求的参数 protected $rules = array( "Login" => array( "login_join" => array( "mobile" => ["require","max" => 11], "password" => "require|length:6,18", ), ), ); /** * 构造函数 * 初始化检测请求时间,签名等 */ public function _initialize() { parent::_initialize(); // 获取参数 $this->request = Request::instance(); //验证是否超时 $this->check_time($this->request->only(["timestamp"])); //验证 $this->check_token($this->request->param()); //验证参数 $this->params = $this->check_params($this->request->except(["timestamp","token"])); }
定义个返回数据的方法
/** * api 数据返回 * @param [int] $code [结果码 200:正常/4**数据问题/5**服务器问题] * @param [string] $msg [接口要返回的提示信息] * @param [array] $data [接口要返回的数据] * @return [string] [最终的json数据] */ 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; }
验证是否超时
/** * 验证请求是否超时 * @param [array] $arr [包含时间戳的参数数组] * @return [json] [检测结果] */ 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"); } }
验证token
/** * 验证token(防止篡改数据) * @param [array] $arr [全部请求参数] * @return [json] [token验证结果] */ 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 /*********** 服务器端生成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")); // 服务器端即时生成的token /*********** 对比token,返回结果 ***********/ if ($app_token !== $service_token) { $this->return_msg(1,"Token is not correct"); } }
验证参数
/** * 验证参数 参数过滤 * @param [array] $arr [除time和token外的所有参数] * @return [return] [合格的参数数组] */ public function check_params($arr) { /*********** 获取参数的验证规则 ***********/ $rule = $this->rules[$this->request->controller()][$this->request->action()]; /*********** 验证参数并返回错误 ***********/ $this->validater = new Validate($rule); if (!$this->validater->check($arr)) { $this->return_msg(1,$this->validater->getError()); } /*********** 如果正常,通过验证 ***********/ return $arr; }
可以登陆后将token存储起来,也可以每次请求都验证token.
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28744.html
摘要:合适和够用是最完美的追求。比如从页面去请求的资源。它允许浏览器向跨源服务器,发出请求,从而克服了只能同源使用的限制。定义在中的路由都是无状态的,并且会应用中间件组。 关于作者 程序开发人员,不拘泥于语言与技术,目前主要从事PHP和前端开发,使用Laravel和VueJs,App端使用Apicloud混合式开发。合适和够用是最完美的追求。 个人网站:http://www.linganm...
摘要:合适和够用是最完美的追求。比如从页面去请求的资源。它允许浏览器向跨源服务器,发出请求,从而克服了只能同源使用的限制。定义在中的路由都是无状态的,并且会应用中间件组。 关于作者 程序开发人员,不拘泥于语言与技术,目前主要从事PHP和前端开发,使用Laravel和VueJs,App端使用Apicloud混合式开发。合适和够用是最完美的追求。 个人网站:http://www.linganm...
摘要:合适和够用是最完美的追求。比如从页面去请求的资源。它允许浏览器向跨源服务器,发出请求,从而克服了只能同源使用的限制。定义在中的路由都是无状态的,并且会应用中间件组。 关于作者 程序开发人员,不拘泥于语言与技术,目前主要从事PHP和前端开发,使用Laravel和VueJs,App端使用Apicloud混合式开发。合适和够用是最完美的追求。 个人网站:http://www.linganm...
摘要:对了,在这之前,首先要祝大家端午节快乐嘎嘎正文切入正题。其实在接入之前,我就有点范嘀咕,客户端不会拿不到吧果然怕什么来什么,安卓那边告诉我错误,取不到值。和安卓那边沟通,他们表示框架中可以模拟浏览器行为,实现的自动发送。 写在前面 时间:2017-05-29 7:30 距离上篇文章发布已经一个多月了,本来自己的计划是一周一记,怎么就变成月记了呢?最近工作的事情忙的焦头烂额,当然也不能...
阅读 1144·2021-11-23 09:51
阅读 647·2021-11-19 09:40
阅读 1321·2021-10-11 10:58
阅读 2319·2021-09-30 09:47
阅读 3703·2021-09-22 15:55
阅读 2115·2021-09-03 10:49
阅读 1235·2021-09-03 10:33
阅读 684·2019-08-29 17:12