1

ServiceStackのSocialBootstrapApiを使用しており、OnRegisteredメソッドをオーバーライドするために使用できるクラスCustomUserSessionが含まれています。新しいユーザーが登録したイベントを公開できるように、登録に関する情報を取得しようとしているので、オーバーライドしたいと思います。このハンドラーは、登録を処理したRegistrationServiceのインスタンスを提供しますが、登録要求自体または結果のUserAuthインスタンスについては何も提供しません。たとえば、登録に使用したメールアドレスを取得したいのですが。

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

それは便利でしょう!:)

それとも、これについて別の方法がありますか?

前もって感謝します。

4

1 に答える 1

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

RegistrationService によって作成された UserAuth インスタンスを OnRegistered ハンドラーに渡すのは、正しくない設計でしょうか?

デザインの決定はプロに任せます。上記のコードは機能するはずです。キャスティングは少し見苦しいですが、必要なデータはすべてそこにあります。

私は SS へのハッキングが好きではないので、dto.UserName による UserAuth コレクションからユーザー認証情報を選択することにしました。

于 2013-03-19T19:12:33.083 に答える