使用JavaScript获取SharePoint 2013当前用户

30

如何使用JavaScript在Script Editor Web Part中获取当前用户的名称?

12个回答

37

这是对我有效的代码:

<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>

1
非常有用,可以获取Web用户信息。 - GoldBishop
1
如果你使用的是SP2010,那这段代码对你来说是不起作用的,因为在SP2010中_spPageContextInfo.webAbsoluteUrl是不起作用的。在这里可以查看更多信息。 - mohsenof
这对我也起作用了,谢谢!我无法使用ClientContext对象,因为它不会触发任何错误,但JS进程被阻止创建ClientContext。 - Alex
我遇到了这个JS错误。Uncaught ReferenceError: L_Menu_BaseUrl未定义 - CidaoPapito
如果您正在使用脚本编辑器 Web 部件,则可以使用 _spPageContextInfo.userDisplayName_spPageContextInfo.userEmail 来获取用户名或电子邮件地址。 - jdgregson
这段代码需要管理员权限。我想向每个客户端显示登录名。 - Seyed Reza Dadrezaei

22

我发现了一种更简单的方法,它甚至不需要使用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打交道了解到了一些东西,尽管这对我的情况并不是必需的。


如何获取上下文? - aykut aydoğan
SP.ClientContext.get_current(); - Lzh

16

如果您在SharePoint页面中,只需使用以下代码:

_spPageContextInfo.userId;

1
请求是获取用户名,但这只返回用户ID。 - Peter
1
如果您正在使用脚本编辑器 Web 部件,则可以使用 _spPageContextInfo.userDisplayName 或 _spPageContextInfo.userEmail 获取用户名或电子邮件地址。 - jdgregson

14

这个怎么样:

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

4
获取当前用户信息:
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 );
});

4
你可以使用SharePoint JSOM来获取当前用户的账户信息。将以下代码(添加为Script Editor web part中的片段)将在浏览器中显示弹出框,其中包含用户的显示名称和账户名 - 你需要添加其他内容在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托管的WebApps。 - GoldBishop
这段代码是为脚本编辑器 Web 部件编写的 -- 您是否正在尝试在 SharePoint 应用程序中实现相同的功能?如果是,代码会有所不同,因为您没有脚本编辑器 Web 部件具有的上下文。 - Dorrene Brown
实际上,我能够像脚本编辑器一样从WebApp中获取用户。上下文应该始终相同,只取决于您打开哪个门来获取它。将上下文视为EF上下文框架。由于与WebApp和跨域相关的其他问题,我们已经将其放在后面,并实施了一个WebPart,以完成我需要做的工作,直到我们解决了跨域问题。 - GoldBishop
这是正确的方法,即使是后来添加到用户配置文件中的自定义属性也可以获得。使用 personProperties.get_userProfileProperties() 获得一个包含所有属性的完整对象,包括不能通过getter函数获取的自定义属性。 - Martin Braun

1
您可以使用JavaScript来实现,例如:

U can use javascript to achive that like this:

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);      

}

1

我必须使用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://<您的Sharepoint域名>/_api/web/currentuser

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

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

0

如果您知道用户的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";

0

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

_spPageContextOnfo.userLoginName


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接