gpt4 book ai didi

c# - ServiceStack 自定义用户身份验证

转载 作者:太空狗 更新时间:2023-10-29 23:37:15 25 4
gpt4 key购买 nike

有没有人有实际示例说明如何使用本 question 中提出的 int RefId? ?

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

我很快就完成了用户注册,非常简单。也许问题是太容易了?我可以看到它工作,但我不知道如何在它和数据库之间建立联系。

字典方法或 RefId 方法都可能对我有用,只是我不清楚如何使用它们。

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

我的服务.cs

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

最佳答案

您可以使用 RegisterService 的副本来包含您自己的注册服务源代码并修改它以满足您的需要,例如使用自定义 Register DTO具有您想要的其他属性。

但是您可以通过将其添加到 ?querystring 来轻松传递其他参数,而无需更改现有的 Register 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 登录时,它会获取用户的配置文件 Url。将Admin 角色分配给TwitterAdmins 中的用户AppSetting ,这是一种将管理员权限分配给已知 Twitter 用户的方法。最后,将检索到的配置文件 Url 添加到 CustomUserAuth POCO 表并保存。

TechStacks 通过 registering a generic OrmLiteAuthRepository 告诉 ServiceStack 使用自己的 CustomUserAuth 表:

var authRepo = new OrmLiteAuthRepository<CustomUserAuth, UserAuthDetails>(dbFactory);
container.Register<IUserAuthRepository>(authRepo);
authRepo.InitSchema();

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

关于c# - ServiceStack 自定义用户身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37667800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com