如何在drupal服务模块中使用会话身份验证



我有Drupal 7和Services 3.x(3.10)。在/admin/structure/services页面中,我创建了一个端点和我的自定义模块:

function webServices_services_resources() {
$api = array(
'customers' => array(
    'retrieve' => array(
     'help' => 'Retrieves posted blogs',
     'callback' => '_webServices_retrieve',
     'access arguments' => array('access content'),
     'access arguments append' => FALSE,
     'args' => array(
         array(
           'name' => 'id',
           'type' => 'int',
           'description' => 'The id of the note to get',
           'source' => array('path' => '0'),
           'optional' => FALSE,
         ),
       ),
      ),
    ),
  );
return $api;
}

现在,我向我的base_url/endpoint/user/login.json(传递用户名和密码)发出POST请求,并获得session_name和session_id。

如果我调用(例如)base_url/endpoint/customers/1.json,并使用以下标头:

User-Agent: Fiddler
Content-Type: application/json
Host: liburna3.alpha-si.org
Cookie: SESS738851ba4e98ab1f17a7252513dc0719=hy5xVjlDzjIbXz-nlwEV4GywbAPAPL0d_aFGhtIRWzw

我得到错误403:用户xxxxxxxxx 的访问被拒绝

问题出在哪里?

我会通过调用base_url/endpoint/system/connect来检查我的身份验证状态。

如果你没有登录(或者你的标题不正确),它会返回:

"sessid": "PfG79I6elMMYln8nyftReLOY0d5So7O0C3LRIdbOeMo",
  "session_name": "SESS74282c529439441e18b575b0e6fe308f",
  "user": {
    "uid": 0,
    "hostname": "2a02:8388:1580:2500:7b:3322:23a4:c902",
    "roles": {
      "1": "anonymous user"
    },
    "cache": 0,
    "timestamp": 1460891635
  }
}

如果您已登录,它将返回result的user属性中的完整userdatat。

我为几乎所有的drupal服务调用设置了一个测试站点。>您可以输入basepath和endpoint并测试后端。在此处查找=>http://www.drupalionic.org/explore/

输入数据,然后转到资源->服务3.x->系统,然后单击连接选项卡。

你也可以在这里找到一个功能齐全的drupal服务的angular lib=>https://github.com/BioPhoton/ng-drupal-7-services

相关内容

  • 没有找到相关文章

最新更新