需要登录验证的api调用

2014-09-01 18:39:23
王春生
58461
最后编辑:朱金勇 于 2023-03-20 08:58:12
分享链接
摘要:在使用api机制进行集成的时候,有的应用场景会涉及到会话登录。这种情况下面会话调用需要经过下面的三个步骤:

在使用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

评论列表
samuel 2022-07-07 13:24:11
你好,https://127.0.0.1/zentao/user-login.json?account=xx&password=xx&zentaosid=g486uc556suak9vdfpu7bkdcs4登陆后,返回结果是<html><meta charset='utf-8'/><style>body{background:white}</style><script>self.location='/zentao/my-changepassword.json';

</script>
是需要对账号进行配置才可以通过这种方式登陆么
王春生 2022-07-11 14:06:49
后台,密码安全级别改一下。
Jake 2022-03-01 10:15:33
用接口session登陆和网页端cookie同一个接口获取的数据不一致
王春生 2022-03-02 08:29:41
每次获取session都会变化的。只要获取一次,然后在后续请求里面追加就可以。
受不了先生 2021-10-19 15:14:31
session = requests.session()
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>

哪里出了问题吗???
王春生 2021-11-05 08:45:38
后台打开了弱口令扫描。可以关一下。
受不了先生 2021-11-05 10:36:45
后台打开了中等的密码安全检查,我的密码大小写数字都有,但还是返回<html><meta charset='utf-8'/><style>body{background:white}</style><script>self.location='/index.php?m=my&f=changepassword&t=json';
</script>
王春生 2021-11-10 13:07:03
可以先关掉吧。可能长度不够。:)
duke 2021-10-12 15:44:13
登录时传的password 可以是密文吗?如果不行有其他的解决办法吗
王春生 2021-10-18 10:45:40
可以。
duke 2021-10-09 15:07:41
你好,我现在遇到了如下问题:
我通过/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 解决/关闭/激活 等),请问有什么办法可以实现吗?
王春生 2021-10-18 10:45:01
你参考下我们control方法里面的判断逻辑,跟踪下。
聂先生 2021-09-30 16:37:20
我下载安装了最新的15.5版本的系统,用api测试工具调试新的api接口。用api可以正常登录,获取sessionid,但是用api来创建一个用户需求,就一直不能成功。能看看怎么回事吗?
正常通过页面,我看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",但是数据没有被保存,用户需求没有被正常创建。
王春生 2021-10-18 10:43:37
你用firefox或者chrome的浏览器工具跟踪下我们post表单传递的数据。要保证数据传输是正确的。
ferderer 2021-06-24 14:35:00
调用其它接口时怎么判断传的sessionID是不是已经登录,我调用创建需求接口时随便传个sessionID返回的状态也是success
{
"data": "{\"locate\":\"http:\\/\\/192.*.*.*\\/zentao\\/user-login-L3plbnRhby9zdG9yeS1jcmVhdGUuanNvbg==.json\"}",
"status": "success",
"md5": "708cccc71946aa7f206067853fa9686e"
}
王春生 2021-06-25 08:38:03
sessionid无所谓的,你传参也可以,获取也可以。只要能够正常登陆,这个sessionid所对应的session就可以有登陆信息。
无名 2021-09-08 14:50:07
我试下这个
无名 2021-09-08 13:35:40
不错哦
II 2021-03-17 15:06:04
http://pm.zentao.com/biz/user-login.json?zentaosid=j0fc342jlt6s619pun84ul14s4,然后在form data里填写account和password,对吗?我在使用的时候,有时候不能成功登录。
Skrrr 2021-03-11 11:19:17
用户已经登录,调用获取bug列表的api但是返回了1,问题是我的bug里面已经有新增的两个bug数据
http://127.0.0.1:81/zentao/m=api&f=getModel&module=bug&methodName=getBugList&params=productID=1,branch=0
请问哪里出了问题?
王春生 2021-03-12 08:26:05
可以加我们qq群讨论下。
伟浩 2021-03-03 10:15:26
怎么样可以免登录访问接口。 oss登录的文档没有说明type的参数是什么。能提供文档链接吗?谢谢
1/8
发表评论
评论通过审核后显示。