SharePoint 2013 使用 JavaScript 获取当前用户

Posted

技术标签:

【中文标题】SharePoint 2013 使用 JavaScript 获取当前用户【英文标题】:SharePoint 2013 get current user using JavaScript 【发布时间】:2014-01-25 16:51:00 【问题描述】:

如何在脚本编辑器 Web 部件中使用 javascript 获取当前用户名?

【问题讨论】:

【参考方案1】:

这是对我有用的代码:

<script src="/SiteAssets/jquery.SPServices-2013.02a.js" type="text/javascript"></script>
<script src="/SiteAssets/jquery.js" type="text/javascript"></script>

<script type="text/javascript">
  var userid= _spPageContextInfo.userId;
  var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + userid + ")";
  var requestHeaders =  "accept" : "application/json;odata=verbose" ;
  $.ajax(
    url : requestUri,
    contentType : "application/json;odata=verbose",
    headers : requestHeaders,
    success : onSuccess,
    error : onError
  );

  function onSuccess(data, request)
    var loginName = data.d.Title;
    alert(loginName);
  

  function onError(error) 
    alert("error");
  
</script>

【讨论】:

对于获取网络用户信息非常有用。 如果你像我一样使用 SP2010,它对你不起作用,因为_spPageContextInfo.webAbsoluteUrl 在 SP2010 上不起作用。检查here 这对我也有用,谢谢!我无法使用 ClientContext 对象,因为它不会触发任何错误,但是 JS 进程被阻止创建 ClientContext。 我收到了这个 JS 错误。 未捕获的 ReferenceError: L_Menu_BaseUrl 未定义 如果您使用的是脚本编辑器 webpart,您可以使用 _spPageContextInfo.userDisplayName_spPageContextInfo.userDisplayName 获取用户名或电子邮件地址。【参考方案2】:

我找到了一个更简单的方法,它甚至不使用 SP.UserProfiles.js。我不知道它是否适用于每个人的特殊情况,但绝对值得分享。

//assume we have a client context called context.
var web = context.get_web();
var user = web.get_currentUser(); //must load this to access info.
context.load(user);
context.executeQueryAsync(function()
    alert("User is: " + user.get_title()); //there is also id, email, so this is pretty useful.
, function()alert(":("););

无论如何,感谢您的回答,我不得不与 UserProfiles 打成一片,尽管这对我的情况来说并不是必需的。

【讨论】:

如何获取上下文? SP.ClientContext.get_current();【参考方案3】:

如果您在 SharePoint 页面中,请使用:

_spPageContextInfo.userId;

【讨论】:

请求是获取用户名。这只是返回用户 ID。 如果您使用的是脚本编辑器 webpart,您可以只使用 _spPageContextInfo.userDisplayName 或 _spPageContextInfo.userDisplayName 来获取用户名或电子邮件地址。 根据您的 SPS 版本,某些属性不起作用:请参阅 webcache.googleusercontent.com/…【参考方案4】:

这个怎么样:

$.getJSON(_spPageContextInfo.webServerRelativeUrl + "/_api/web/currentuser")
.done(function(data) 
    console.log(data.Title);
)
.fail(function()  console.log("Failed"));

【讨论】:

【参考方案5】:

您可以使用 SharePoint JSOM 获取当前用户的帐户信息。此代码(在脚本编辑器 Web 部件中添加为 sn-p 时)只会在浏览器中弹出用户的显示和帐户名称 - 您需要在 gotAccount 中添加任何其他内容以获取格式中的名称你想要的。

<script type="text/javascript" src="/_layouts/15/SP.js"></script>
<script type="text/javascript" src="/_layouts/15/SP.UserProfiles.js"></script>
<script type="text/javascript">

  var personProperties;

  SP.SOD.executeOrDelayUntilScriptLoaded(getCurrentUser, 'SP.UserProfiles.js');

  function getCurrentUser() 
    var clientContext = new SP.ClientContext.get_current();
    personProperties = new SP.UserProfiles.PeopleManager(clientContext).getMyProperties();
    clientContext.load(personProperties);
    clientContext.executeQueryAsync(gotAccount, requestFailed);
  

  function gotAccount(sender, args) 
    alert("Display Name: "+ personProperties.get_displayName() + 
        ", Account Name: " + personProperties.get_accountName());
  

  function requestFailed(sender, args) 
    alert('Cannot get user account information: ' + args.get_message());
  

</script>

有关详细信息,请参阅 MSDN 中的 SP.UserProfiles.PersonProperties 文档。

【讨论】:

也许只有我一个人,但我无法让它与 ClientWebApp 一起使用。从一张白纸开始,并重新验证。这种设计最适合哪种部署模式?关于 Auto、SharePoint 或 Provider 托管的 WebApp。 此代码是为脚本编辑器 Web 部件编写的 - 您是否尝试在 SharePoint 应用程序中实现相同的功能?如果是这样,代码会有点不同,因为您不会拥有与脚本编辑器 Web 部件相同的上下文。 实际上,我能够从 WebApp 中获取用户,就像脚本编辑器一样。上下文应该始终相同,只是取决于您打开哪扇门来获得它。将上下文视为 EF 上下文框架。有其他问题,与 WebApp 和跨域相关。搁置该开发并实施 WebPart,以完成我需要完成的工作,直到我们可以解决 x 域。 这是获取稍后添加到用户配置文件的自定义属性的正确方法。使用personProperties.get_userProfileProperties() 获取具有所有属性的完整对象,包括使用getter 函数无法获取的自定义对象。【参考方案6】:

获取当前用户信息:

jQuery.ajax(
    url: _spPageContextInfo.webServerRelativeUrl + "/_api/web/currentuser",
    type: "GET",
    headers:  "Accept": "application/json;odata=verbose" 
).done(function( data )
    console.log( data );
    console.log( data.d.Title );
).fail(function()
    console.log( failed );
);

【讨论】:

【参考方案7】:

你可以使用 javascript 来实现这样的目标:

function loadConstants() 

    this.clientContext = new SP.ClientContext.get_current();
    this.clientContext = new SP.ClientContext.get_current();
    this.oWeb = clientContext.get_web();
    currentUser = this.oWeb.get_currentUser();  
    this.clientContext.load(currentUser);
      completefunc:this.clientContext.executeQueryAsync(Function.createDelegate(this,this.onQuerySucceeded), Function.createDelegate(this,this.onQueryFailed));




//U must set a timeout to recivie the exactly user u want:

function onQuerySucceeded(sender, args) 

    window.setTimeout("ttt();",1000);

function onQueryFailed(sender, args) 

    console.log(args.get_message());


//By using a proper timeout, u can get current user :

function ttt() 

    var clientContext = new SP.ClientContext.get_current();
    var groupCollection = clientContext.get_web().get_siteGroups();
    visitorsGroup = groupCollection.getByName('OLAP Portal Members');

    t=this.currentUser .get_loginName().toLowerCase();

    console.log ('this.currentUser .get_loginName() : '+ t);      


【讨论】:

【参考方案8】:

我必须使用 XML 来完成,通过添加内容编辑器 Web 部件将以下内容放入内容编辑器 Web 部件中,编辑 Web 部件,然后单击“编辑源”按钮并粘贴:

<input type="button" onclick="GetUserInfo()" value="Show Domain, Username and Email"/> 

<script type="text/javascript">
function GetUserInfo() 

$.ajax(
    type: "GET",
    url: "https://<ENTER YOUR DOMAIN HERE>/_api/web/currentuser",
    dataType: "xml",

    error: function (e) 
        alert("An error occurred while processing XML file" + e.toString());
        console.log("XML reading Failed: ", e);
    ,

    success: function (response) 
        var content = $(response).find("content");
        var spsEmail = content.find("d\\:Email").text();
        var rawLoginName = content.find("d\\:LoginName").text();
        var spsDomainUser = rawLoginName.slice(rawLoginName.indexOf('|') + 1);
        var indexOfSlash =  spsDomainUser.indexOf('\\') + 1;
        var spsDomain = spsDomainUser.slice(0, indexOfSlash - 1);
        var spsUser = spsDomainUser.slice(indexOfSlash);
        alert("Domain: "  + spsDomain + " User: " + spsUser + " Email: " + spsEmail);
    
);


</script>

检查以下链接以查看您的数据是 XML 还是 JSON:

https://<Your_Sharepoint_Domain>/_api/web/currentuser

在接受的答案中,凯特使用了这种方法:

var userid= _spPageContextInfo.userId;
var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + userid + ")

【讨论】:

【参考方案9】:

如果你知道用户的id,你可以使用下面的函数:

function getUser(id)
var returnValue;
jQuery.ajax(
 url: "http://YourSite/_api/Web/GetUserById(" + id + ")",
 type: "GET",
 headers:  "Accept": "application/json;odata=verbose" ,
 success: function(data) 
       var dataResults = data.d;
       alert(dataResults.Title);
  
);

或者你可以试试

var listURL = _spPageContextInfo.webAbsoluteUrl + "/_api/web/currentuser";

【讨论】:

【参考方案10】:

试试这个代码..

function GetCurrentUsers() 

    var context = new SP.ClientContext.get_current();
    this.website = context.get_web();
    var currentUser = website.get_currentUser();
    context.load(currentUser);
    context.executeQueryAsync(Function.createDelegate(this, onQuerySucceeded), Function.createDelegate(this, onQueryFailed));
   function onQuerySucceeded() 

       var currentUsers = currentUser.get_title();
       document.getElementById("txtIssued").innerhtml = currentUsers;

    

    function onQueryFailed(sender, args) 
        alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());
       

【讨论】:

考虑在代码中添加一点解释。【参考方案11】:

可以使用sp页面上下文信息:

_spPageContextOnfo.userLoginName

【讨论】:

以上是关于SharePoint 2013 使用 JavaScript 获取当前用户的主要内容,如果未能解决你的问题,请参考以下文章

sharepoint 2013 使用 VBA 访问

使用 Python3 更新 Sharepoint 2013

sharepoint 2013 使用outlook 打开sharepoint 任务失败

SharePoint 2013 使用 JavaScript 获取当前用户

安装和配置SharePoint 2013 Workflow

SharePoint 2013 中的自定义字段