【问题标题】:How can I use ServiceStack RegistrationFeature plugin with Redis?如何将 ServiceStack RegistrationFeature 插件与 Redis 一起使用?
【发布时间】:2014-09-08 05:34:05
【问题描述】:

我正在添加

Plugins.Add(new RegistrationFeature());

现在我已经获得了注册服务的 API 页面,但是如何将它与 redis 一起使用? 有什么简单的方法吗?

public object Post(Register register)
{
    var Id = DBService.RegisterUser(register.UserName, register.FirstName, register.LastName, register.DisplayName, register.Email, register.Password, register.AutoLogin, register.Continue);

和 Redis 页面:

public string RegisterUser(string userName, string firstName, string lastName, string displayName, string email,
                           string password, bool? autoLogin, string @continue)
{
    using (var redisclient = RedisManager.GetClient())
    {
        var redisUser = redisclient.As<Register>();
        var yeniKayit = new Register()
        {
            AutoLogin = autoLogin,
            Continue = @continue,
            DisplayName = displayName,
            UserName = userName,
            Email = email,
            FirstName = firstName,
            LastName = lastName,
            Password = password
        };
        redisUser.Store(yeniKayit);
        return yeniKayit.Continue;
    }
}

我创建了这种代码,它保存到 redis 但这次身份验证不起作用?

【问题讨论】:

    标签: c# redis servicestack authentication


    【解决方案1】:

    如果您启用RegistrationFeature 并使用the Redis setup I suggested in this answer(为完整起见如下所示),则注册将像正常的 ServiceStack 身份验证一样工作。

    private IRedisClientsManager redisClientsManager;
    
    public override void Configure(Funq.Container container)
    {
        // Configure ServiceStack to connect to Redis
        // Replace with your connection details
        redisClientsManager = new PooledRedisClientManager("127.0.0.1:6379");
        container.Register<IRedisClientsManager>(c => redisClientsManager);
        container.Register<ICacheClient>(c => c.Resolve<IRedisClientsManager>().GetCacheClient()).ReusedWithin(Funq.ReuseScope.None);
    
        // Setup the authorisation feature
        Plugins.Add(new AuthFeature(()=> 
            new AuthUserSession(),
            new IAuthProvider[]{ new BasicAuthProvider() }
        ));
    
        // Use a RedisAuthRepository
        var userRepo = new RedisAuthRepository(redisClientsManager);
        container.Register<IUserAuthRepository>(userRepo);
    
        // Enable the RegistrationFeature
        Plugins.Add(new RegistrationFeature());
    }
    

    因此,如果您向/register 发布有效的注册请求,那么将在 Redis 存储库中创建用户。

    {
        "UserName": "john.smith",
        "Password": "test",
        "Email": "john.smith@domain.com",
        "FirstName": "John",
        "LastName": "Smith",
        "DisplayName": "John Smith"
    }
    

    【讨论】:

    • @user3790322 如果它现在可以工作,那就太好了,别忘了接受这个答案。如果您需要进一步的帮助,请告诉我。祝你的项目好运。
    • 我在这片海洋中感到很孤独(servicestack)哈哈谢谢你的帮助:)我不会忘记你的建议希望很快看到
    • 嘿嘿,有更新或删除之类的管理吗?第二个问题redis存储iauthsession,是禁用存储会话的方法还是必须创建?谢谢
    • 亲爱的 scott,它运行良好我只是想知道是否可以通过 cs 代码更改 ctypted 用户登录?
    • 哦,对不起,伙计,你是我的朋友,我也让你成为我在 facebook 或 googe 上的社交朋友 + 一定是有问题,我接受你的消息,对不起朋友 :) 请不要难过,我讨厌看到悲伤的人
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2018-03-06
    相关资源
    最近更新 更多