ServiceStack自定义用户身份validation

有没有人有这个问题中提出的如何使用int RefId的实际例子?

我正在尝试进行身份validation,但我需要将userAuth数据与我自己的用户表结合起来。 问题是我不知道如何将附加参数传递给“/ register”方法。 我想我正在寻找像“OnAddUser”这样的事件,这将允许我在混音中添加一些额外的参数。

我设法让用户注册工作非常快,非常简单。 也许问题是它太容易了? 我可以看到它的工作,但我无法弄清楚如何在它和数据库之间进行。

无论是字典方法还是RefId方法都可能对我有用,对我来说,使用它也不是很明显。

是否可以完全覆盖创建用户? 我找到了这段代码:

MyServices.cs

看起来它正在创建用户代替“/ register”但是有一些其他文章表明你不能覆盖ServiceStack DTO,你必须使用默认表。

您可以使用RegisterService源代码的副本包含您自己的注册服务,并根据您的需要进行修改,例如使用自定义注册DTO以及您想要的其他属性。

但是,您可以轻松传递其他参数,而无需更改现有的Register DTO,只需将其添加到您可以在服务中访问的?querystring中:

 var myParam = base.Request.QueryString["myParam"]; 

否则,在注册或身份validation期间添加自定义逻辑的方法是使用现有的会话或身份validation事件 。

TechStacks在CustomAuthUserSession中有一个这样的例子:

 public class CustomUserSession : AuthUserSession { public string DefaultProfileUrl { get; set; } public string GithubProfileUrl { get; set; } public string TwitterProfileUrl { get; set; } public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IAuthTokens tokens, Dictionary authInfo) { base.OnAuthenticated(authService, session, tokens, authInfo); var appSettings = authService.TryResolve(); var userAuthRepo = authService.TryResolve(); var userAuth = userAuthRepo.GetUserAuth(session, tokens); var dbConnectionFactory = authService.TryResolve(); foreach (var authTokens in session.ProviderOAuthAccess) { if (authTokens.Provider.ToLower() == "github") { GithubProfileUrl = session.GetProfileUrl(); } if (authTokens.Provider.ToLower() == "twitter") { TwitterProfileUrl = session.GetProfileUrl(); if (appSettings.GetList("TwitterAdmins").Contains(session.UserName) && !session.HasRole(RoleNames.Admin)) { userAuthRepo.AssignRoles(userAuth, roles:new[]{RoleNames.Admin}); } } DefaultProfileUrl = GithubProfileUrl ?? TwitterProfileUrl; using (var db = dbConnectionFactory.OpenDbConnection()) { var userAuthInstance = db.Single(x => x.Id == this.UserAuthId.ToInt()); if (userAuthInstance != null) { userAuthInstance.DefaultProfileUrl = this.DefaultProfileUrl; db.Save(userAuthInstance); } } } } } 

当用户通过GitHub或Twitter登录时,会获取用户的个人资料url。 将Twitter 管理员角色分配给TwitterAdmins AppSetting中的用户,这是一种为已知Twitter用户分配管理员权限的方法。 最后,将检索到的Profile Url添加到CustomUserAuth POCO表并保存。

TechStacks通过注册通用的OrmLiteAuthRepository告诉ServiceStack使用自己的CustomUserAuth表:

 var authRepo = new OrmLiteAuthRepository(dbFactory); container.Register(authRepo); authRepo.InitSchema(); 

现在它将在CustomUserAuth保存用户信息而不是默认的UserAuth表。