2012-07-26 21 views
1

注意完全一樣的問題,因爲Tridion UGC comment shows author as null外表套上UGC匿名用戶保存到數據庫UGC ID爲空

投遞從演示網站用戶保存ID爲空評論。這會導致下一條評論顯示爲來自評論的第一個用戶,並且ID爲null。

cd核心日誌文件顯示AnonymousPostClaimProcessor正在使用tracking id

DEBUG ClaimStore - put: uri=taf:claim:contentdelivery:webservice:user, value=tridion_2151731a-97d2-4a90-800f-bee20074b970 
TRACE ODataInputParser - Parsing following queryString: /Comments 
TRACE BasePostClaimProcessor - User ID: tridion_2151731a-97d2-4a90-800f-bee20074b970, Request URI: /odata.svc/Comments 
DEBUG PostAllowedByEveryoneClaimProcessor - Allowing user 'tridion_2151731a-97d2-4a90-800f-bee20074b970' to post on: /odata.svc/Comments 
DEBUG ClaimStore - put: uri=taf:claim:contentdelivery:webservice:post:allowed, value=true 
DEBUG ClaimStore - put: uri=taf:response:cookie:generation, value=true 
DEBUG WebContext - setCurrentClaimStore: [email protected], thread: Thread-1 
DEBUG ClaimStore - put: uri=taf:request:uri, value=/odata.svc/Comments 
DEBUG ClaimStore - put: uri=taf:request:full_url, value=http://staging:8080/odata.svc/Comments 
DEBUG ClaimStore - put: uri=taf:request:headers, value={content-type=[Ljava.lang.String;@3582c132, connection=[Ljava.lang.String;@1b59d510, host=[Ljava.lang.String;@26b31b77, accept=[Ljava.lang.String;@38d0357a, content-length=[Ljava.lang.String;@6d66f9b9} 
DEBUG ClaimStore - put: uri=taf:request:cookies, value={} 
DEBUG ClaimStore - put: uri=taf:request:parameters, value={CONTENT_TYPE=[Ljava.lang.String;@39518cc, $orderby=[Ljava.lang.String;@318efaea, QUERY_STRING=[Ljava.lang.String;@21fb3211, $filter=[Ljava.lang.String;@72940b84, $expand=[Ljava.lang.String;@558041e0, $top=[Ljava.lang.String;@576504fa, $skip=[Ljava.lang.String;@2929e5e9} 
DEBUG ClaimStore - put: uri=taf:server:variables, value={REMOTE_USER=, PATH_TRANSLATED=C:\inetpub\staging_cd_webservices\odata.svc, SERVER_PORT=8080, SCRIPT_NAME=/odata.svc, REMOTE_ADDR=127.0.0.1, AUTH_TYPE=, SERVER_PROTOCOL=HTTP/1.1, REQUEST_METHOD=GET, DOCUMENT_ROOT=C:\inetpub\staging_cd_webservices, REMOTE_HOST=127.0.0.1, SERVER_NAME=staging, SECURE=false} 
DEBUG ClaimStore - put: uri=taf:session:id, value=tridion_546acbc8-a478-45cd-80fa-5d93bc10481d 
DEBUG ClaimStore - put: uri=taf:tracking:id, value=tridion_08092308-7e3b-47c7-9524-79497daee2e2 
DEBUG ClaimStore - put: uri=taf:session:attributes, value={Tridion.ContentDelivery.AmbientData.ClaimStore=Tridion.ContentDelivery.AmbientData.ClaimStore} 
DEBUG AllowAnonymousPostClaimProcessor - No external user specified, using tracking id. 

我的UGC環境盒被配置如下:

<ClaimProcessorDefinitions> 
    <!-- Allows anonymous posts. Disable when using a login system. --> 
    <ClaimProcessorDefinition Uri="taf:claimprocessor:webservice:ugc:anonymous" 
           ImplementationClass="com.tridion.ugc.odata.claimprocessor.AllowAnonymousPostClaimProcessor" 
           Description="Claim processor that allows an anonymous post."> 
     <RequestStart> 
      <OutputClaims> 
       <ClaimDefinition Uri="taf:claim:contentdelivery:webservice:user"/> 
      </OutputClaims> 
     </RequestStart> 
    </ClaimProcessorDefinition> 
    <!-- Post allowed by everyone. --> 
    <ClaimProcessorDefinition Uri="taf:claimprocessor:webservice:ugc:post" 
           ImplementationClass="com.tridion.ugc.odata.claimprocessor.PostAllowedByEveryoneClaimProcessor" 
           Description="Claim processor that allows a post."> 
     <RequestStart> 
      <InputClaims> 
       <ClaimDefinition Uri="taf:claim:contentdelivery:webservice:user"/> 
      </InputClaims> 
      <OutputClaims> 
       <ClaimDefinition Uri="taf:claim:contentdelivery:webservice:post:allowed"/> 
      </OutputClaims> 
     </RequestStart> 
    </ClaimProcessorDefinition> 
</ClaimProcessorDefinitions> 

爲Th下的UGC墨盒配置e cm ugc網絡服務是相同的,但確實顯示正確的ID。

當任何人都可以指示我正確的配置文件進行驗證時,這將非常棒。

EDIT 27/7

上的呈現CD WS上的UGC環境盒配置如下,並有AllowAnonymousPostClaimProcessor定義。

<?xml version="1.0" encoding="UTF-8"?> 
<CartridgeDefinition Version="6.1" Uri="tcd:cartridge:ugc" Description="UGC cartridge." 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:noNamespaceSchemaLocation="schemas/cd_ambient_cartridge_conf.xsd"> 
    <ClaimDefinitions> 
     <ClaimDefinition Uri="taf:claim:contentdelivery:webservice:post:allowed" Scope="REQUEST" 
         Description="A flag where a POST is allowed to the UGC OData entities."/> 
     <ClaimDefinition Uri="taf:claim:contentdelivery:webservice:user" Scope="REQUEST" 
         Description="The user posting to the OData service."/> 
     <ClaimDefinition Uri="taf:claim:tracking:internalcontactid" Scope="REQUEST" 
         Description="The Audience Manager internal contact id."/> 
     <ClaimDefinition Uri="taf:claim:tracking:updatedcontact:xml" Scope="REQUEST" 
         Description="The Audience Manager updated contact xml."/> 
    </ClaimDefinitions> 

    <ClaimProcessorDefinitions> 
     <!-- Allows anonymous posts. Disable when using a login system. --> 
     <ClaimProcessorDefinition Uri="taf:claimprocessor:webservice:ugc:anonymous" 
            ImplementationClass="com.tridion.ugc.odata.claimprocessor.AllowAnonymousPostClaimProcessor" 
            Description="Claim processor that allows an anonymous post."> 
      <RequestStart> 
       <OutputClaims> 
        <ClaimDefinition Uri="taf:claim:contentdelivery:webservice:user"/> 
       </OutputClaims> 
      </RequestStart> 
     </ClaimProcessorDefinition> 

     <!-- Post allowed by owners. --> 
     <!-- 
     <ClaimProcessorDefinition Uri="taf:claimprocessor:webservice:ugc:post" 
            ImplementationClass="com.tridion.ugc.odata.claimprocessor.PostAllowedByOwnerClaimProcessor" 
            Description="Claim processor that determines if a post is allowed by checking if the user is the owner."> 
      <RequestStart> 
       <InputClaims> 
        <ClaimDefinition Uri="taf:claim:contentdelivery:webservice:user"/> 
       </InputClaims> 
       <OutputClaims> 
        <ClaimDefinition Uri="taf:claim:contentdelivery:webservice:post:allowed"/> 
       </OutputClaims> 
      </RequestStart> 
     </ClaimProcessorDefinition> 
     --> 

     <!-- Post allowed by everyone. --> 
     <ClaimProcessorDefinition Uri="taf:claimprocessor:webservice:ugc:post" 
            ImplementationClass="com.tridion.ugc.odata.claimprocessor.PostAllowedByEveryoneClaimProcessor" 
            Description="Claim processor that allows a post."> 
      <RequestStart> 
       <InputClaims> 
        <ClaimDefinition Uri="taf:claim:contentdelivery:webservice:user"/> 
       </InputClaims> 
       <OutputClaims> 
        <ClaimDefinition Uri="taf:claim:contentdelivery:webservice:post:allowed"/> 
       </OutputClaims> 
      </RequestStart> 
     </ClaimProcessorDefinition> 
    </ClaimProcessorDefinitions> 
</CartridgeDefinition> 

,並請POST日誌文件:

DEBUG ClaimStore - put: uri=taf:response:cookie:generation, value=true 
DEBUG WebContext - setCurrentClaimStore: [email protected], thread: Thread-6 
DEBUG ClaimStore - put: uri=taf:request:uri, value=/odata.svc/Comments 
DEBUG ClaimStore - put: uri=taf:request:full_url, value=http://staging:8080/odata.svc/Comments 
DEBUG ClaimStore - put: uri=taf:request:headers, value={expect=[Ljava.lang.String;@30a4effe, content-type=[Ljava.lang.String;@1c8825a5, host=[Ljava.lang.String;@2e5f8245, accept=[Ljava.lang.String;@6197cc, content-length=[Ljava.lang.String;@734d246} 
DEBUG ClaimStore - put: uri=taf:request:cookies, value={} 
DEBUG ClaimStore - put: uri=taf:request:parameters, value={CONTENT_TYPE=[Ljava.lang.String;@1cd8f55c, QUERY_STRING=[Ljava.lang.String;@67d479cf} 
DEBUG ClaimStore - put: uri=taf:server:variables, value={REMOTE_USER=, PATH_TRANSLATED=C:\inetpub\staging_cd_webservices\odata.svc\Comments, SERVER_PORT=8080, SCRIPT_NAME=/odata.svc/Comments, REMOTE_ADDR=127.0.0.1, AUTH_TYPE=, SERVER_PROTOCOL=HTTP/1.1, REQUEST_METHOD=POST, DOCUMENT_ROOT=C:\inetpub\staging_cd_webservices, REMOTE_HOST=127.0.0.1, SERVER_NAME=staging, SECURE=false} 
DEBUG ClaimStore - put: uri=taf:session:id, value=tridion_51f52143-1095-4585-9eb8-b01f95dff721 
DEBUG ClaimStore - put: uri=taf:tracking:id, value=tridion_f409708f-4063-4eca-8c81-f140ba4a6568 
DEBUG AllowAnonymousPostClaimProcessor - No external user specified, using tracking id. 
DEBUG ClaimStore - put: uri=taf:claim:contentdelivery:webservice:user, value=tridion_f409708f-4063-4eca-8c81-f140ba4a6568 
TRACE ODataInputParser - Parsing following queryString: /Comments 
TRACE BasePostClaimProcessor - User ID: tridion_f409708f-4063-4eca-8c81-f140ba4a6568, Request URI: /odata.svc/Comments 
DEBUG PostAllowedByEveryoneClaimProcessor - Allowing user 'tridion_f409708f-4063-4eca-8c81-f140ba4a6568' to post on: /odata.svc/Comments 
DEBUG ClaimStore - put: uri=taf:claim:contentdelivery:webservice:post:allowed, value=true 
DEBUG ClaimStore - put: uri=taf:response:cookie:generation, value=true 
DEBUG WebContext - setCurrentClaimStore: [email protected], thread: Thread-6 
DEBUG ClaimStore - put: uri=taf:request:uri, value=/odata.svc/Comments 
DEBUG ClaimStore - put: uri=taf:request:full_url, value=http://staging:8080/odata.svc/Comments 
DEBUG ClaimStore - put: uri=taf:request:headers, value={expect=[Ljava.lang.String;@3351e824, content-type=[Ljava.lang.String;@465fadce, host=[Ljava.lang.String;@338bd37a, accept=[Ljava.lang.String;@20e90906, content-length=[Ljava.lang.String;@234f79cb} 
DEBUG ClaimStore - put: uri=taf:request:cookies, value={ASP.NET_SessionId=wx00dumyccjnopshos2ucw4l} 
DEBUG ClaimStore - put: uri=taf:request:parameters, value={CONTENT_TYPE=[Ljava.lang.String;@36c51089, QUERY_STRING=[Ljava.lang.String;@43c0ae76} 
DEBUG ClaimStore - put: uri=taf:server:variables, value={REMOTE_USER=, PATH_TRANSLATED=C:\inetpub\staging_cd_webservices\odata.svc, SERVER_PORT=8080, SCRIPT_NAME=/odata.svc, REMOTE_ADDR=127.0.0.1, AUTH_TYPE=, SERVER_PROTOCOL=HTTP/1.1, REQUEST_METHOD=POST, DOCUMENT_ROOT=C:\inetpub\staging_cd_webservices, REMOTE_HOST=127.0.0.1, SERVER_NAME=staging, SECURE=false} 
DEBUG ClaimStore - put: uri=taf:session:id, value=tridion_90269b03-0f48-4986-a607-ec04010a9161 
DEBUG ClaimStore - put: uri=taf:tracking:id, value=tridion_9a97ffcb-7c38-41b6-95dd-8bd6d564a163 
DEBUG ClaimStore - put: uri=taf:session:attributes, value={Tridion.ContentDelivery.AmbientData.ClaimStore=Tridion.ContentDelivery.AmbientData.ClaimStore} 
DEBUG AllowAnonymousPostClaimProcessor - No external user specified, using tracking id. 
DEBUG ClaimStore - put: uri=taf:claim:contentdelivery:webservice:user, value=tridion_9a97ffcb-7c38-41b6-95dd-8bd6d564a163 
TRACE ODataInputParser - Parsing following queryString: /Comments 
TRACE BasePostClaimProcessor - User ID: tridion_9a97ffcb-7c38-41b6-95dd-8bd6d564a163, Request URI: /odata.svc/Comments 
DEBUG PostAllowedByEveryoneClaimProcessor - Allowing user 'tridion_9a97ffcb-7c38-41b6-95dd-8bd6d564a163' to post on: /odata.svc/Comments 
DEBUG ClaimStore - put: uri=taf:claim:contentdelivery:webservice:post:allowed, value=true 
DEBUG ODataService - ODATA.NET: Inserting entity on path: Comments 
DEBUG WebContext - setCurrentClaimStore: [email protected], thread: Thread-2 
TRACE ODataInputParser - Parsing following queryString: Comments 
DEBUG WritableCommentEntryService - Parsing comment: {d:{"Id":0,"ItemPublicationId":11,"ItemId":361,"ItemType":64,"CreationDate":"\/Date(1343385654263+60)\/","LastModifiedDate":"\/Date(1343385654263+60)\/","User":{"Id":null,"Name":"John Doe","EmailAddress":"[email protected]","ExternalId":null},"Content":"sdfsdfsdf","Moderator":null,"ModeratedDate":null,"Score":0,"Status":0}}. 
DEBUG UGCConfigurationLoader - Attempt loading default storage configuration file 
DEBUG WritableCommentEntryService - Storing comment: Comment [commentId=0, content=sdfsdfsdf, itemPublicationId=11, itemId=361, itemType=64, [email protected], creationDate=Fri Jul 27 11:40:54 BST 2012, lastModifiedDate=Fri Jul 27 11:40:54 BST 2012, moderatedDate=null, moderator=null, score=0, status=0]. 
DEBUG JPACommentDAO - Add comment to storage: Comment [commentId=0, content=sdfsdfsdf, itemPublicationId=11, itemId=361, itemType=64, [email protected], creationDate=Fri Jul 27 11:40:54 BST 2012, lastModifiedDate=Fri Jul 27 11:40:54 BST 2012, moderatedDate=null, moderator=null, score=0, status=0]. 
DEBUG JPAUserDAO - Searching for user with id null in storage. 
TRACE JPABaseDAO - [ActionTimer] Query List Result time: 10275376 nanoseconds (10.275376 milliseconds) 
DEBUG JPAUserDAO - User already in storage. No need to create new one. 

你可以在某些時候該用戶ID爲空,已經當註釋數據張貼看到。

+2

看起來你REMOTE_USER是空白。 DEBUG ClaimStore - put:uri = taf:server:variables,value = {REMOTE_USER =,.....可能會導致它嗎? – 2012-07-26 17:44:42

+0

嗯,這可能與任何外部用戶,這也是在日誌文件和理由使用跟蹤ID認可.. 'DEBUG AllowAnonymousPostClaimProcessor - 規定,不使用外部用戶跟蹤id.' 如果是因爲我正在與匿名用戶合作,所以我不知道如何解決這個問題。 – 2012-07-26 17:52:18

+1

您是否有 2012-07-26 18:20:41

回答

3

清理瀏覽器cookie,然後再次嘗試在您的UGC演示網站上發表評論。 這次填寫正確的數據。您看到的行爲通常發生在您首先對某件事進行評分並且UGC爲您創建了一個匿名配置文件時......在創建該配置文件之後,您只能以編程方式修改生成的用戶名('null')。如果這對你有用......很好......如果不是......需要一些調試步驟。

您的第一步是確保您的UGC展示網站上的ADF正確設置。在演示站點上的ADF上,您至少需要啓用AllowAnonymousPostClaimProcessor。啓用TRACE記錄以檢查UGC演示網站上的所有內容是否都正常。

第二步(未完成第一步,清理餅乾並重試)將在UGC WS上移動......啓用TRACE日誌記錄並檢查實際爲POST的請求,並向我們提供日誌記錄。

希望這會有所幫助。

PS:您複製/粘貼的日誌記錄來自GET請求....而不是來自實際進行POST的請求....您可以通過查看「uri」中的「REQUEST_METHOD = GET」 = taf:server:variables「聲明。

乾杯, Daniel。

+0

感謝您的意見!刪除了Cookies,並且還添加了來自不同會話的評論,沒有運氣。我添加了您請求的配置和日誌記錄數據。 – 2012-07-27 09:53:11

5

把下面的代碼的用戶名客戶端和的tridion側

驗證應在組件(DLL)

Tridion side : 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Text.RegularExpressions; 
using Tridion.ContentDelivery.UGC.WebService; 
using Tridion.ContentDelivery.UGC.Web.Model; 
using Tridion.ContentDelivery.UGC.Web.Utilities; 
using Tridion.ContentDelivery.AmbientData; 
using System.Configuration; 

namespace PresentationLayer 
{ 
     public class UGCWordsSpamFilter : SpamFilter 
    { 
     // Collect a list of disallowed words 

     IList<string> spamWords = new List<string>(); 

     public UGCWordsSpamFilter() 
     { 
      bool hasExcludes = true; 
      int i = 1; 
      while (hasExcludes) 
      { 
       string spamFilterWord = ConfigurationSettings.AppSettings["Comment.SpamFilter.Exclude" + i]; 
       if (!string.IsNullOrEmpty(spamFilterWord)) 
       { 
        spamWords.Add(spamFilterWord); 
       } 
       else 
       { 
        hasExcludes = false; 
       } 
       i++; 
      } 
     } 

     /// <summary> 
     /// Validate a comment. 
     /// </summary> 
     /// <param name="claimStore">The Claim Store from the current request.</param> 
     /// <param name="comment">The comment to validate.</param> 
     /// <returns>A valid comment.</returns> 
     /// <exception cref="SpamFilterException">If comment is regarded as spam.</exception> 
     public Comment ValidateComment(ClaimStore claimStore, Comment comment) 
     { 
      string commentContent = comment.Content; 
      string userName = comment.User.Name; 
      string emailAddress = comment.User.EmailAddress; 
      if (String.IsNullOrEmpty(commentContent)) 
      { 
       throw new SpamFilterException("Comment cannot be empty."); 
      } 
      else if (String.IsNullOrEmpty(userName)) 
      { 
       throw new SpamFilterException("Username cannot be empty."); 
      } 
      else if (String.IsNullOrEmpty(emailAddress)) 
      { 
       throw new SpamFilterException("User email address cannot be empty."); 
      } 
      else if (!CheckEmail(emailAddress)) 
      { 
       throw new SpamFilterException("User email address is wrong."); 
      } 
      else 
      { 
       foreach (string spamWord in spamWords) 
       { 
        if (commentContent.Contains(spamWord)) 
        { 
         throw new SpamFilterException("Comment rejected: contains the word '" + spamWord + "'"); 
        } 
       } 
       // The comment contains none of the configured words, so it is acceptable. 

       return comment; 
      } 
     } 

     private bool CheckEmail(string emailAddress) 
     { 
      string strPattern = "^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})$"; 
      if (Regex.IsMatch(emailAddress, strPattern)) 
      { 
       return true; 
      } 
      return false; 
     } 

    } 
} 

Add some keys in web config 
<add key="Comment.SpamFilter.Assembly" value="PresentationLayer" /> 
    <add key="Comment.SpamFilter.Implementation" value="PresentationLayer.UGCWordsSpamFilter" /> 
<add key="Comment.SpamFilter.Exclude1" value="poker" />