有没有人有一个如何使用这个
question中提出的int RefId的实际例子?
我正在尝试进行身份验证,但我需要将userAuth数据与我自己的用户表结合起来.问题是我不知道如何将附加参数传递给“/ register”方法.我想我正在寻找像“OnAddUser”这样的事件,这将允许我在混音中添加一些额外的参数.
我设法让用户注册工作很快,这非常容易.也许问题是它太容易了?我可以看到它的工作,但我无法弄清楚如何在它和数据库之间进行.
无论是字典方法还是RefId方法都可能对我有用,对我来说,如何使用它也是不明显的.
是否可以完全覆盖创建用户?我找到了这段代码:
MyServices.cs
看起来它正在创建用户代替“/ register”,但是有一些其他文章暗示你不能覆盖ServiceStack DTO,你必须使用默认表.
最佳答案 您可以使用
RegisterService源代码的副本包含您自己的注册服务,并根据您的需要进行修改,例如:使用自定义
Register DTO以及所需的其他属性.
但是,您可以轻松传递其他参数,而无需更改现有的寄存器DTO,只需将其添加到您可以在服务中访问的?查询字符串中:
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登录时,会获取用户的个人资料网址.将Twitter管理员角色分配给TwitterAdmins AppSetting中的用户,这是一种为已知Twitter用户分配管理员权限的方法.最后,将检索到的Profile 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表.