从Azure AD获取用户

时间:2017-12-21 06:49:48

标签: php azure azure-active-directory microsoft-graph azure-ad-graph-api

我无法弄清楚为什么我的循环根本不起作用。我已成功连接到我的客户端目录,我可以获取一些用户。我跟着PHP instructions。但是本教程不包括仅为所有用户提取100个用户的默认页面大小的示例。

我知道skipToken(explained here),但由于某种原因,我无法使用我的循环。

基本上我首先定义一个数组和两个子数组。

 $myArray = array();
 $myArray['skipToken'] = "";
 $myArray['users'] = "";

然后我将执行第一次获取,这样我就可以获得skipToken和一堆用户。

 require_once("GraphServiceAccessHelper.php");
 $users = GraphServiceAccessHelper::getFeed('users');

将值推送到现有数组中。

 $myArray['skipToken'] = $users->{'odata.nextLink'};
 $myArray['users'][] = $users->{'value'};

现在他们充满了信息。现在是时候循环了!

 for($i = 0; $i < 2; $i++){
    if($myArray['skipToken'] != ""){
      $skipToken = $myArray['skipToken'];
      require_once("GraphServiceAccessHelper.php");
      $users = GraphServiceAccessHelper::getNextFeed('users', $skipToken);
      $myArray['skipToken'] = $users->{'odata.nextLink'};
      $myArray['users'][] = $users->{'value'};
    }
 }

控制台从错误中触发,指向循环skipToken定义部分:

Notice: Undefined property: stdClass::$odata.nextLink

$myArray['skipToken'] = $users->{'odata.nextLink'};

1 个答案:

答案 0 :(得分:1)

好的,我明白了。

首先,我必须在实际令牌之前删除所有内容。

$skipToken = $users->{'odata.nextLink'};
$skipToken = substr($skipToken, strpos($skipToken, "=") + 1);

然后在循环中使用获取新的 skipToken 并执行与上面相同的操作:

$new = GraphServiceAccessHelper::getNextFeed('users', $skipToken);
if(isset($new->{'odata.nextLink'})){
  $skipToken = empty($new->{'odata.nextLink'});
} else{
  break;
}
$skipToken = substr($skipToken, strpos($skipToken, "=") + 1);
$myArray['tokens'] = $skipToken;
$myArray['users'][] = $new->{'value'};

通过检查'odata.nextLink"是否存在,我可以轻松停止while循环,因为lastpage不包含'odata.nextLink'

if(isset($new->{'odata.nextLink'})){
  $skipToken = empty($new->{'odata.nextLink'});
} else{
  break;
}

我将每个100个用户数组附加到另​​一个我可以在PHP外部轻松使用的数组。