Javascript 如何从Phabricator域之外获取登录用户信息?
简而言之,我在域a上有一个Pharmicator设置,但是我必须在域B上实现一个依赖于Pharmicator的服务 这就是故事,我正在尝试使用Phabricator管道Javascript 如何从Phabricator域之外获取登录用户信息?,javascript,php,cors,phabricator,Javascript,Php,Cors,Phabricator,简而言之,我在域a上有一个Pharmicator设置,但是我必须在域B上实现一个依赖于Pharmicator的服务 这就是故事,我正在尝试使用Phabricator管道user.whoamiAPI收集信息,以查看当前用户是否登录。但由于种种原因,我没能去。我想知道这样做的正确方法是什么 我试过三种方法,但都不管用。这是我试过的 方法1:使用Ajax请求 我所做的只是使用api令牌触发一个POST Ajax请求 $.ajax({ url: 'http://127.0.0.1:8080/ap
user.whoami
API收集信息,以查看当前用户是否登录。但由于种种原因,我没能去。我想知道这样做的正确方法是什么
我试过三种方法,但都不管用。这是我试过的
方法1:使用Ajax请求我所做的只是使用api令牌触发一个POST Ajax请求
$.ajax({
url: 'http://127.0.0.1:8080/api/user.whoami',
method: 'POST',
cache: false,
data: 'api-token='+app.PHABRICATOR_APIKEY
}).done(function(response) {
console.dir(response);
}).fail(function(jqXHR, textStatus) {
console.log(textStatus);
});
此方法不起作用(如预期),因为它是CORS请求,并且Phabricator服务器没有访问控制允许来源
头
<>虽然我可以补充说<代码>访问控制允许原点< /代码>标头,但不知何故,这需要修改PHabReCalver源代码,所以我会认为这是我最后的解决方案。
方法2:使用PHP作为代理,并在内部使用curl请求它。因此,整个请求将类似于客户端浏览器PHP代理脚本Phabricator
这个方法实际上能够发送请求并获得响应。但是信息是错误的,因为它只返回API密钥的用户
如果我理解正确的话,curl
没有我的浏览器会话,因此它无法真正知道我(浏览器客户端)是谁。因此,我假设API将回退以使用API键的信息,从而返回我不打算返回的信息
方法3:使用Phabricator提供的PHP库
require_once '/var/www/html/phabricator/libphutil/src/__phutil_library_init__.php';
$api_token = PHABRICATOR_APIKEY;
$api_parameters = array();
$client = new ConduitClient('http://127.0.0.1:8080/');
$client->setConduitToken($api_token);
$result = $client->callMethodSynchronous('user.whoami', $api_parameters);
return $result;
这也没什么特别的,只是文档中代码的直接副本。但它同样只返回API密钥所属的用户。我认为这和方法2的表现是一样的
我在想,如果我以错误的方式理解了管道API。更重要的是,我想知道如何实现整个体系结构,以便它能够使用当前的浏览器会话收集信息。多谢各位