- 1 zentaoPHP二次开发简介
-
2. zentaoPHP框架扩展机制
- 2.1 扩展机制简介
- 2.2 新增独立模块
- 2.3 对控制层(control)扩展
- 2.4 对模型层(model)扩展
- 2.5 对视图层(view)扩展
- 2.6 对样式表和js进行扩展
- 2.7 对语言配置进行扩展
- 2.8 增加新的类库
-
3. zentaoPHP框架API机制
- 3.1 api机制简介
- 3.2 需要登录验证的api调用
- 4 zentaoPHP框架命令行机制
需要登录验证的api调用
- 2014-09-01 18:39:23
- 王春生
- 58461
- 最后编辑:朱金勇 于 2023-03-20 08:58:12
- 分享链接
在使用api机制进行集成的时候,有的应用场景会涉及到会话登录。这种情况下面会话调用需要经过下面的三个步骤:
一、获得session。
首先要访问api模块的getSessionID方法,获得session。GET方式:?m=api&f=getSessionID&t=json
PATHINFO: api-getsessionid.json
返回的格式中包含sessionName和sessionID。
在后续的访问中,必须以cookie的方式,或者GET方式,将session传递给服务器。
简单的方式就是在请求的url地址后面追加$sessionName=$sessionID。比如http://pms.zentao.net/index.json?zentaosid=xxxxxxx
注意:上面地址中的sid参数名称可以在config文件里面通过 $config->sessionVar 设置,比如禅道config/config.php文件中 $config->sessionVar = 'zentaosid'。老版本禅道默认是 sid,新版本禅道默认是 zentaosid,可以具体查看一下使用禅道的代码中是如何定义的。
二、验证用户身份。
然后可以访问user模块的login方法,来进行用户身份的验证。用户身份验证,需要提供用户名和密码,以post方式传递给user-login方法。
变量名为: account, password。
三、调用相应的API。
用户验证通过之后,就可以通过页面调用的api,或者超级model调用的api来获取相应的数据了。
备注:
目前该功能还只有在禅道项目管理软件中实现,蝉知门户和然之协同暂时还没有实现。
注意:本文档是针对禅道16.5版本之前的zentaoPHP框架,禅道最新版本的二次开发文档请参照新版:
https://devel.easycorp.cn/book/extension-new/intro-52.html
</script>
是需要对账号进行配置才可以通过这种方式登陆么
resp = session.get(url=self.host+'/index.php?m=api&f=getSessionID&t=json')
zentaosid = json.loads(json.loads(resp.text)['data'])['sessionID']
session.headers['Cookie'] = f'zentaosid={zentaosid};'
session.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'
resp = session.post(url=self.host+f'/index.php?m=user&f=login&t=json&zentaosid{zentaosid}&account=A&password=B')
print(resp.text)
resp = session.get(url=self.host+f'/index.php?m=company&f=browse&t=json&zentaosid={zentaosid}')
print(resp.text)
第一个print能够正确打印出response,第二个print输出<html><meta charset='utf-8'/><style>body{background:white}</style><script>self.location='/index.php?m=my&f=changepassword&t=json';</script>
哪里出了问题吗???
</script>
我通过/zentao/user-login.json?get&account="+UserName+"&password="+pwd 这个url 进行系统登录,这里的密码无论是明文还是密文,均可;
但是我通过 /zentao/api-getsessionid.json 获取sessionid后 再通过 /zentao/user-login.json?account="+UserName+"&password="+pwd+"&zentaosid="+sessionId
这个url则只能用明文密码进行登录了,请问是为什么?
我现在有个需求,是希望通过明文或者密文登录系统,然后进行禅道的交互(比如,bug 解决/关闭/激活 等),请问有什么办法可以实现吗?
正常通过页面,我看html代码中的访问网址是:/www/story-create-3-10-0-0-0-0-0-0--story.html
我用api工具post网址改成:/www/story-create-3-10-0-0-0-0-0-0--story.josn. 对应的参数也设置上了,运行后,返回的state:"success",但是数据没有被保存,用户需求没有被正常创建。
{
"data": "{\"locate\":\"http:\\/\\/192.*.*.*\\/zentao\\/user-login-L3plbnRhby9zdG9yeS1jcmVhdGUuanNvbg==.json\"}",
"status": "success",
"md5": "708cccc71946aa7f206067853fa9686e"
}
http://127.0.0.1:81/zentao/m=api&f=getModel&module=bug&methodName=getBugList¶ms=productID=1,branch=0
请问哪里出了问题?