我使用的是ServiceStack的SocialBootstrapApi,它包含一个类CustomUserSession,我可以用它来覆盖OnRegistered方法。我想要覆盖它,因为我正在尝试获取有关注册的信息,以便可以发布新用户已注册的事件。此处理程序提供处理注册的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。那么,我应该如何着手获取这些信息呢?将RegistrationService创建的UserAuth实例传递给OnRegistered处理程序是不是错误的设计?
public interface IAuthSession
{
...
void OnRegistered(IServiceBase registrationService, UserAuth userAuth); // <-- new signature
...
}那会很方便!:)
或者,也许还有另一种方法来解决这个问题?
提前谢谢。
发布于 2013-03-20 03:12:33
那么我应该如何获取这些信息呢?
您应该能够通过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,所以我选择从dto.UserName收集的UserAuth中选择用户身份验证信息
https://stackoverflow.com/questions/15506809
复制相似问题