从 Azure AD 中获取用户

Fetch users from Azure AD

我不明白为什么我的循环根本不工作。我已成功连接到我的客户目录,并且能够获取一些用户。我已经关注了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'};

好的,我明白了。

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

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

然后在循环中使用 get new 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 之外使用它。