>api接口主要接口主要解决的问题 * [ ] 接口被其它网站恶意盗刷 * [ ] 防止接口被前端重复提交 * [ ] 提高接口使用的可控制性 * [ ] 降低开发接口的成本 >[danger]在api接口开发中,凡是需要强制用户登录的接口,控制器中方法的名称【action】的前缀为"member_",当检测到【action】的前缀为"member_",接口会先去检测用户登录信息,如果用户未登录,接口返回 {"err":"1","code":"10207","content":"用户未登录"} , 需要注意的是api不再使用session,用户信息的获取是通过cowcms_userid参数获取,当用户登录后会返回cowcms_userid的值,前端可以将该值保存起来,在需要强制用户登录的接口访问时携带该参数,后端api直接可以通过$this->userInfo获取用户信息. ## 接口开发 ``` namespace xxxxxx; use api\Api; class interface extends Api { /************************************************************* * member_getInfo 需要强制登录的接口,在调用该接口时,必须要传递cowcms_userid * return json 返回结果 *************************************************************/ public function member_getInfo() { $userInfo = $this->userInfo;//获取的登陆用户信息 return $this->returnData($userInfo); } /************************************************************* * getInfo 不需要强制登录的接口,返回文字列表 * return json 返回结果 *************************************************************/ public function getInfo() { $userInfo = $this->userInfo;//如果用户登录$userInfo为用户信息,如果没登录为false return $this->returnData(["测试"]); } } ``` >cowcms_userid值的获取 方式 * [ ] 当控制器继承了 Member或者Memberbase类时,并且用户登录成功可以获取该值 ``` namespace app\signed\controller; use user\Member; class Signedajax extends Member { function getCowcmsUserid() { $userInfo = $this -> userInfo; echo $userInfo['cowcms_userid']; } } ``` ``` namespace app\signed\controller; use user\Memberbase; class Signedajax extends Memberbase { function getCowcmsUserid() { $userInfo = $this -> userInfo; echo $userInfo['cowcms_userid']; } } ``` * [ ] 如果控制器没有继承Member或者Memberbase类,用户进行登录操作时 ``` namespace app\signed\controller; class login { function login() { /*用户登陆代码*/ $userInfo = ['id'=>10,"......"]; $cowcms_userid = exeFun('setCowcmsUserid',[$userInfo['id']],'member'); echo $cowcms_userid ; } } ```