是否有人在此question中提出了如何使用int RefId的实际示例?
我正在尝试进行身份验证,但我需要将userAuth数据与我自己的用户表结合起来。问题是我不知道如何将附加参数传递给" / register"方法。我想我正在寻找像" OnAddUser"这将允许我在混音中添加一些额外的参数。
我设法让用户注册工作非常快,非常简单。也许问题是它太容易了?我可以看到它的工作,但我无法弄清楚如何在它和数据库之间进行。
无论是词典方法还是RefId方法都可能对我有用,对我来说,使用它也不是很明显。
是否可以完全覆盖创建用户?我找到了这段代码:
MyServices.cs
看起来像是在创建用户代替" / register"但是有一些其他文章暗示你不能覆盖ServiceStack DTO,你必须使用默认表。
答案 0 :(得分:2)
您可以使用RegisterService源代码的副本包含您自己的注册服务,并根据您的需要对其进行修改,例如:将自定义Register DTO与您想要的其他属性一起使用。
但您可以轻松传递其他参数,而无需更改现有的注册DTO,只需将其添加到?querystring
,您可以使用以下内容访问服务:
var myParam = base.Request.QueryString["myParam"];
否则,在注册或身份验证期间添加自定义逻辑的方法是使用现有的Session or Auth Events。
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<string, string> authInfo)
{
base.OnAuthenticated(authService, session, tokens, authInfo);
var appSettings = authService.TryResolve<IAppSettings>();
var userAuthRepo = authService.TryResolve<IAuthRepository>();
var userAuth = userAuthRepo.GetUserAuth(session, tokens);
var dbConnectionFactory = authService.TryResolve<IDbConnectionFactory>();
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<CustomUserAuth>(x =>
x.Id == this.UserAuthId.ToInt());
if (userAuthInstance != null)
{
userAuthInstance.DefaultProfileUrl = this.DefaultProfileUrl;
db.Save(userAuthInstance);
}
}
}
}
}
当用户通过GitHub或Twitter登录时,会获取用户的个人资料网址。将管理员角色分配给 TwitterAdmins AppSetting中的用户,这是一种为已知Twitter用户分配管理员权限的方法。最后,检索到的配置文件URL将添加到CustomUserAuth
POCO表并保存。
TechStacks告诉ServiceStack使用自己的CustomUserAuth表而不是registering a generic OrmLiteAuthRepository:
var authRepo = new OrmLiteAuthRepository<CustomUserAuth, UserAuthDetails>(dbFactory);
container.Register<IUserAuthRepository>(authRepo);
authRepo.InitSchema();
现在它将用户信息保存在CustomUserAuth
而不是默认的UserAuth
表中。