C# ServiceStack自定义用户身份验证
有没有人有一个关于如何使用本文中建议的int RefId的实际例子 我正在尝试进行身份验证,但我需要将userAuth数据与我自己的用户表结合起来。问题是我不知道如何向“/register”方法传递附加参数。我想我正在寻找一个类似“OnAddUser”的事件,它允许我在混合中加入一些额外的参数 我设法让用户注册工作很快,这是超级容易。也许问题是太简单了?我可以看到它的工作,但我不知道如何在它和数据库之间 无论是字典方法还是RefId方法都可能对我有效,只是我不清楚如何使用它们 是否可以完全覆盖创建用户?我发现这个代码: MyServices.csC# ServiceStack自定义用户身份验证,c#,authentication,
servicestack,C#,Authentication,
servicestack,有没有人有一个关于如何使用本文中建议的int RefId的实际例子 我正在尝试进行身份验证,但我需要将userAuth数据与我自己的用户表结合起来。问题是我不知道如何向“/register”方法传递附加参数。我想我正在寻找一个类似“OnAddUser”的事件,它允许我在混合中加入一些额外的参数 我设法让用户注册工作很快,这是超级容易。也许问题是太简单了?我可以看到它的工作,但我不知道如何在它和数据库之间 无论是字典方法还是RefId方法都可能对我有效,只是我不清楚如何使用它们 是否可以完全覆盖创
这看起来像是在用create user代替“/register”,但还有一些文章建议您不能覆盖ServiceStack DTO,您必须使用默认表。您可以使用源代码的副本包含自己的注册服务,并根据需要对其进行修改,例如,将自定义项与所需的其他属性一起使用 但是,通过将现有寄存器DTO添加到
?querystring
中,您可以轻松地传递附加参数,而无需更改现有寄存器DTO,您可以通过以下方式在服务内部访问该寄存器:
var myParam = base.Request.QueryString["myParam"];
否则,在注册或身份验证期间添加自定义逻辑的方法是利用现有逻辑
TechStacks在其中有一个例子:
它现在将用户信息保存在
CustomUserAuth
中,而不是默认的UserAuth
表中。虽然我以前见过类似的代码,但直到我看到您在这里展示的方式,我才明白这一点。谢谢你的帮助。顺便说一句,ServiceStack非常棒…一个小的更新。。。我最终只是使用数据库触发器来更新RefId。这似乎工作得很好,让我们使用已经非常简单的Servicestack验证例程。
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);
}
}
}
}
}
var authRepo = new OrmLiteAuthRepository<CustomUserAuth, UserAuthDetails>(dbFactory);
container.Register<IUserAuthRepository>(authRepo);
authRepo.InitSchema();