Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ServiceStack自定义用户身份验证_C#_Authentication_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack - Fatal编程技术网 servicestack,C#,Authentication,servicestack" /> servicestack,C#,Authentication,servicestack" />

C# ServiceStack自定义用户身份验证

C# ServiceStack自定义用户身份验证,c#,authentication,servicestack,C#,Authentication,servicestack,有没有人有一个关于如何使用本文中建议的int RefId的实际例子 我正在尝试进行身份验证,但我需要将userAuth数据与我自己的用户表结合起来。问题是我不知道如何向“/register”方法传递附加参数。我想我正在寻找一个类似“OnAddUser”的事件,它允许我在混合中加入一些额外的参数 我设法让用户注册工作很快,这是超级容易。也许问题是太简单了?我可以看到它的工作,但我不知道如何在它和数据库之间 无论是字典方法还是RefId方法都可能对我有效,只是我不清楚如何使用它们 是否可以完全覆盖创

有没有人有一个关于如何使用本文中建议的int RefId的实际例子

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

我设法让用户注册工作很快,这是超级容易。也许问题是太简单了?我可以看到它的工作,但我不知道如何在它和数据库之间

无论是字典方法还是RefId方法都可能对我有效,只是我不清楚如何使用它们

是否可以完全覆盖创建用户?我发现这个代码:

MyServices.cs


这看起来像是在用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();