2013-03-19 38 views
1

我正在使用ServiceStack的SocialBootstrapApi,它包含一個類CustomUserSession,我可以用它來覆蓋OnRegistered方法。我想覆蓋它,因爲我正在嘗試獲取有關注冊的信息,以便我可以發佈新用戶已註冊的事件。此處理程序提供RegistrationService的一個實例,用於處理註冊,但不提供有關注冊請求本身或生成的UserAuth實例的任何內容。例如,我想獲取用於註冊的電子郵件地址。覆蓋IAuthSession OnRegistered處理程序

public override void OnRegistered(IServiceBase registrationService) 
    { 
     base.OnRegistered(registrationService); 

     // Ideally, I could do get the registered user's primary e-mail address from the UserAuth instance. 
     var primaryEmail = ((RegistrationService) registrationService) 
      .UserAuthRepo 
      .GetUserAuth(this, null) //<--- 'this' is a mostly empty session instance 
      .PrimaryEmail; 
    } 

這當然不行,因爲我使用了GetUserAuth呼叫會話實例不包含任何必要的認證信息是用於查找用戶的認證信息是有用的。所以GetUserAuth會像你期望的那樣返回null。那麼我應該如何去獲取這些信息呢? OnRegistered處理程序是否被設計爲由RegistrationService創建的UserAuth實例傳遞?

public interface IAuthSession 
    { 
     ... 
     void OnRegistered(IServiceBase registrationService, UserAuth userAuth); // <-- new signature 
     ... 
    } 

這樣很方便! :)

或者還有另外一種方法可以解決這個問題嗎?

在此先感謝。

回答

1

那麼我該如何去獲取這些信息呢?

您應該能夠通過registrationService訪問註冊請求的所有數據。你只需要做一個小挖和鑄造...

public override void OnRegistered(IServiceBase registrationService) 
{ 
    base.OnRegistered(registrationService); 

    var requestContext = (HttpRequestContext)registrationService.RequestContext; 
    var dto = ((Registration)requestContext.Dto); 
    var primaryEmail = dto.Email; 
} 

難道是不正確的設計爲OnRegistered句柄傳遞由RegistrationService創建的USERAUTH實例?

我會把設計決定留給專業人士。上面的代碼應該可以工作。演員似乎有點難看,但所有必要的數據都在那裏。

我不喜歡入侵SS,所以我選擇從UserAuth集合中選擇用戶認證信息dto.UserName