Sharepoint學習筆記—error處理– The user does not exist or is not unique.

來源:互聯網
上載者:User

   看到網上不少人遇到過這種類似的錯誤,而產生這種錯誤的原因也有多種,我產生此錯誤的背景是在試圖通過ECMAscript物件模型把一個User添加到某個指定的Group中時遇到的。
        

   問題1.當我試圖把一個User添加到Sharepoint的某個指定的Group,而這個User已經在Site Collection中存在,在此背景下我得到此錯誤資訊。
   問題2.如果我試圖把一個在Site Collection中不存在,而在AD中存在的User添加到Sharepoint的某個指定Group中時,這種操作是肯定不能成功的。因為微軟的MSDN中明確指出了只能添加已經在Site Collection中存在的AD Users。
    我的解決步驟如下:
一、檢查關於使用者佈建資訊的代碼是否有問題。
    我原來的代碼如下:   

function addUserToSharePointGroup(groupID) {

        //var clientContext = new SP.ClientContext(siteUrl);
        var clientContext = new SP.ClientContext.get_current();
        var collGroup = clientContext.get_web().get_siteGroups();
        var oGroup = collGroup.getById(groupID);
        var userCreationInfo = new SP.UserCreationInformation();
        userCreationInfo.set_email('help@star.com.cn');
        userCreationInfo.set_loginName('help');
        userCreationInfo.set_title('help');
        this.oUser = oGroup.get_users().add(userCreationInfo);  //add user into group

        var userInfo = '\nUser: ' + oUser.get_title() +
            '\nEmail: ' + oUser.get_email() +
            '\nLogin Name: ' + oUser.get_loginName();

        alert(userInfo);
        clientContext.load(oUser);
        clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceededaddUserToSharePointGroup),
        Function.createDelegate(this, this.onQueryFailedaddUserToSharePointGroup));
    }

    function onQuerySucceededaddUserToSharePointGroup() {

        alert(this.oUser.get_title() + " added.");
    }

    function onQueryFailedaddUserToSharePointGroup(sender, args) {

        alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
    }

    此代碼存在問題主要在userCreateInfo代碼:

    1、set_loginName設定項應該加入此使用者所在的域 DOMAIN 
    2、DOMAIN後面應該用"\\",否則在實際產生的User時就會把DOMAIN與User直接連接起來(如:DOMAINuser),這樣的使用者當然在AD中是不存在的
   因此,在代碼設定中,針對User的Information應該符合真正存在的那個User在AD Account中的設定情況,所以在上述代碼中你可以看到我加入了一個alert來顯示設定的資訊,便於你在查錯時與AD中此user的對應資訊進行比較。

  針對上面的問題修改後的代碼如下:

function addUserToSharePointGroup(groupID) {

        //var clientContext = new SP.ClientContext(siteUrl);
        var clientContext = new SP.ClientContext.get_current();
        var collGroup = clientContext.get_web().get_siteGroups();
        var oGroup = collGroup.getById(groupID);
        var userCreationInfo = new SP.UserCreationInformation();
        userCreationInfo.set_email('help@star.com.cn');
        userCreationInfo.set_loginName('STAR\\help');
        userCreationInfo.set_title('help');
        this.oUser = oGroup.get_users().add(userCreationInfo);  //add user into group

        var userInfo = '\nUser: ' + oUser.get_title() +
            '\nEmail: ' + oUser.get_email() +
            '\nLogin Name: ' + oUser.get_loginName();

        alert(userInfo);
        clientContext.load(oUser);
        clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceededaddUserToSharePointGroup),
        Function.createDelegate(this, this.onQueryFailedaddUserToSharePointGroup));
    }

    function onQuerySucceededaddUserToSharePointGroup() {

        alert(this.oUser.get_title() + " added.");
    }

    function onQueryFailedaddUserToSharePointGroup(sender, args) {

        alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
    }

 

 二、檢查Windows Server的 Domain member: Digitally encrypt or sign secure channel data (always) 安全設定項。
    如果上面的排錯沒有解決The user does not exist or is not unique報錯,那麼就進入這一步進行償試。

    由於我的開發環境是Server 2008 R2,認證方式採用的是Kerberos(據說這點很重要,因為如果採用的是windows NTLM方式,則不會存在Application與AD環境的資訊溝通問題),據說Windows Server 2008 (或 R2)中有某個Feature不支援Sharepoint上啟動並執行Application,由此可能會造成AD資訊交換出問題。
    解決的辦法就是設定Domain member: Digitally encrypt or sign secure channel data (always) 這個安全項。這個選項預設是開啟的,我們需要手工停止它。方法是在伺服器上 Start -> Run -> type gpedit.msc.
進行設定介面後,依序開啟
Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Security Options.在Security Options的右邊你可以看到此選項,請手工將其停止,然後重啟伺服器。

 

  需要指明的是,此處我只列出了上述兩種解決思路,如果上面的情況均未解決你遇到的問題,你就需要針對你自己的特定情況,捕獲可能的相關錯誤資訊來解決問題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.