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

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

【问题讨论】:

    标签: javascript sharepoint sharepoint-2013


    【解决方案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

              【讨论】:

                猜你喜欢
                • 2015-02-26
                • 1970-01-01
                • 1970-01-01
                • 2013-11-15
                • 1970-01-01
                • 2014-09-11
                • 1970-01-01
                • 1970-01-01
                • 2020-05-12
                相关资源
                最近更新 更多