小编off*_*ert的帖子

扩展服务堆栈身份验证 - 使用自定义用户身份验证元数据填充用户会话

我正在尝试扩展Service Stack的身份验证和注册功能.我的身份验证和注册工作正常,但我需要为每个用户添加一些自定义数据.从Service Stack的文档和我发现的其他各种帖子中,您可以使用UserAuth表中内置的MetaData列添加自己的数据.

我创建了一个CustomAuthRepository,所以我可以设置UserAuth的元数据属性,这是我的自定义仓库:

public class CustomAuthRepository : OrmLiteAuthRepository, IUserAuthRepository
{
    public UserAuth CreateUserAuth(UserAuth newUser, string password)
    {
        newUser.Set(new LoginInfo
        {
            IsActive = false,
            PasswordNeedsReset = true
        });
        return base.CreateUserAuth(newUser, password);
    }
}
Run Code Online (Sandbox Code Playgroud)

这对于设置元数据非常有用,我最终在UserAuth表的元数据列中使用了LoginInfo对象的序列化版本.

现在我要做的是当用户进行身份验证时,我需要根据某些元数据更改AuthResponse.例如,如果用户尚未激活,我想返回带有属性的AuthResponseIsActive = get value from custom meta data

如果我可以将自定义元数据导入AuthSession,我想我可以这样做.在我的自定义凭证auth提供程序中,我可以根据AuthSession中的内容更改响应对象:

public class CustomCredentialsAuthProvider : CredentialsAuthProvider
{
    public override object Authenticate(IServiceBase authService, IAuthSession session, Auth request)
    {
        var customUserAuthSession = (CustomUserAuthSession)session;

        if (!customUserAuthSession.LoginInfo.IsActive)
        {
            return new
            {
                UserName = customUserAuthSession.UserName,
                IsActive = customUserAuthSession.LoginInfo.IsActive
            };
        }

        var isAuthenticated …
Run Code Online (Sandbox Code Playgroud)

servicestack

8
推荐指数
1
解决办法
3239
查看次数

标签 统计

servicestack ×1