$cache[$key] = empty($arr) ? NULL : $arr; return $cache[$key]; } // 门户 获取需要在频道显示的栏目主题数据 function portal_channel_thread($fid) { global $forumlist; if (empty($fid)) return NULL; $orderby = array('tid' => 1); $page = 1; // 遍历所有在频道显示内容的栏目 $category_forumlist = channel_category($fid); $arrlist = array(); $forum_tids = array(); $tidlist = array(); if ($category_forumlist) { foreach ($category_forumlist as &$_forum) { // 频道显示数据 $arrlist['list'][$_forum['fid']] = array( 'fid' => $_forum['fid'], 'name' => $_forum['name'], 'rank' => $_forum['rank'], 'type' => $_forum['type'], 'url' => $_forum['url'], 'channel_new' => $_forum['channel_new'], ); $forum_thread = thread_tid__find(array('fid' => $_forum['fid']), $orderby, $page, $_forum['channel_new'], 'tid', array('tid')); // 最新信息按栏目分组 foreach ($forum_thread as $key => $_thread) { $forum_tids[$key] = $_thread; } unset($forum_thread); } $tidlist += $forum_tids; } unset($category_forumlist); // 获取属性对应的tid集合 list($flaglist, $flagtids) = flag_thread_by_fid($fid); empty($flagtids) || $tidlist += $flagtids; unset($flagtids); // 频道置顶 $stickylist = sticky_list_thread($fid); empty($stickylist) || $tidlist += $stickylist; // 在这之前合并所有二维数组 tid值为键/array('tid值' => tid值) $tidarr = arrlist_values($tidlist, 'tid'); // 在这之前使用$tidarr = array_merge($tidarr, $arr)前合并所有一维数组 tid/array(1,2,3) if (empty($tidarr)) { $arrlist['list'] = isset($arrlist['list']) ? array_multisort_key($arrlist['list'], 'rank', FALSE, 'fid') : array(); return $arrlist; } $tidarr = array_unique($tidarr); $pagesize = count($tidarr); // 遍历获取的所有tid主题 $threadlist = well_thread_find_asc($tidarr, $pagesize); // 遍历时为升序,翻转为降序 $threadlist = array_reverse($threadlist); foreach ($threadlist as &$_thread) { // 各栏目最新内容 isset($forum_tids[$_thread['tid']]) AND $arrlist['list'][$_thread['fid']]['news'][$_thread['tid']] = $_thread; // 全站置顶内容 isset($stickylist[$_thread['tid']]) AND $arrlist['sticky'][$_thread['tid']] = $_thread; // 首页属性主题 if (!empty($flaglist)) { foreach ($flaglist as $key => $val) { if (isset($val['tids']) && in_array($_thread['tid'], $val['tids'])) { $arrlist['flaglist'][$key][array_search($_thread['tid'], $val['tids'])] = $_thread; ksort($arrlist['flaglist'][$key]); $arrlist['flag'][$_thread['tid']] = $_thread; } } } } unset($threadlist); if (isset($arrlist['sticky'])) { $i = 0; foreach ($arrlist['sticky'] as &$val) { ++$i; $val['i'] = $i; } } if (isset($arrlist['flag'])) { $i = 0; foreach ($arrlist['flag'] as &$val) { ++$i; $val['i'] = $i; } } if (isset($arrlist['flaglist'])) { foreach ($arrlist['flaglist'] as &$val) { $i = 0; foreach ($val as &$v) { ++$i; $v['i'] = $i; } } } isset($arrlist['list']) AND $arrlist['list'] = array_multisort_key($arrlist['list'], 'rank', FALSE, 'fid'); return $arrlist; } ?>ruby on rails - (Canvas LMS) Email Attribute Missing on Canvas LMS User API with non-admin access token - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

ruby on rails - (Canvas LMS) Email Attribute Missing on Canvas LMS User API with non-admin access token - Stack Overflow

programmeradmin0浏览0评论

I'm building an application for my school as a project for one of my courses. Authentication for this application is being handled by our own Canvas instance with OAuth2. But I encounter an issue when retrieving the email attribute via the users endpoint.

Details:

  • Canvas Instance Setup: I have set up our own Canvas instance (separate from our school's instance) and created a developer key with enforce scopes disabled (for testing purposes).

Admin User Response: When I make a GET request to /api/v1/users/self while logged in as an admin user, I receive a response that includes the email attribute. For example:

{
  "id": 1,
  "name": "connected.ehb@...",
  "created_at": "2025-01-29T18:33:07-07:00",
  "sortable_name": "connected.ehb@...",
  "short_name": "connected.ehb@...",
  "sis_user_id": null,
  "integration_id": null,
  "sis_import_id": null,
  "login_id": "connected.ehb@...",
  "last_name": "",
  "first_name": "connected.ehb@...",
  "email": "connected.ehb@...",
  "locale": null,
  "effective_locale": "en",
  "permissions": {
      "can_update_name": true,
      "can_update_avatar": false,
      "limit_parent_app_web_access": false
  }
}

Regular User Response: However, when I perform the same request while logged in as a regular (non-admin) user, the email attribute is missing from the response. For example:

{
  "id": 10,
  "name": "Gill Mertens",
  "created_at": "2025-02-06T12:52:04+01:00",
  "sortable_name": "Mertens, Gill",
  "short_name": "Gill Mertens",
  "last_name": "Mertens",
  "first_name": "Gill",
  "locale": null,
  "effective_locale": "en-GB",
  "permissions": {
    "can_update_name": true,
    "can_update_avatar": false,
    "limit_parent_app_web_access": false
  }
}

What have tried In the documentation it states that 'email' will always be returned Users - Canvas LMS REST API Documentation

My Question: Since my developer key has global access (with enforce scopes disabled), I was expecting the email attribute to be returned regardless of the user’s role. Is there a specific parameter, setting, or privacy configuration in Canvas that controls the exposure of the email attribute for regular users? Or is this behavior intentional for privacy reasons even when scopes are not enforced?

Any insights or guidance on how to ensure the email is returned for non-admin users would be greatly appreciated!

Thank you for your help.

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论