ServiceStack RedisAuthRepository 不存储任何东西
ServiceStack RedisAuthRepository not storing anything
我在尝试使用 ServiceStack RedisAuthRepository 存储用户信息时遇到了这个问题,因此我可以用它来补充嵌入在 JWT 令牌中的用户 Session。到目前为止,这是我的会议。
Plugins.Add(new AuthFeature(() => new PlatformSession(),
new IAuthProvider[] {
new JwtAuthProvider(AppSettings) {
ExpireTokensIn = TimeSpan.FromSeconds(120),
ExpireRefreshTokensIn = TimeSpan.FromDays(14),
AuthKeyBase64 = ConfigurationManager.AppSettings["jwt.AuthKeyBase64"],
CreatePayloadFilter = Payload.CreatePayloadFilter,
RequireSecureConnection = false
},
new CustomCredentialsAuthProvider()
}
));
var redisClientsManager = new RedisManagerPool("localhost:6379");
container.Register<ICacheClient>(c => c.Resolve<IRedisClientsManager>().GetCacheClient()).ReusedWithin(Funq.ReuseScope.None);
container.Register<IRedisClientsManager>(c => redisClientsManager);
container.Register<IAuthRepository>(c => new RedisAuthRepository(c.Resolve<IRedisClientsManager>()));
我的问题是,当我对用户进行身份验证时,redis 中似乎没有保存任何内容。甚至以为我添加了一个测试用户什么也没有显示。
var authRepo = (IUserAuthRepository)HostContext.TryResolve<IAuthRepository>();
try
{
authRepo.CreateUserAuth(new User
{
UserName = "1",
UserId = 1,
ActiveCustomerId = 1
}, "test");
}
catch (Exception) {
编辑:
解决了。
我的问题是分配给 object 的用户名无效,这就是它从未被存储的原因...
RedisAuthRepository 确实将 UserAuth 保存在 Redis 中,如此 RedisAuthRepository example in Gistlyn:
var redisManager = new RedisManagerPool("localhost:6379");
var redisAuth = new RedisAuthRepository(redisManager);
var id = new Random().Next(1,10000);
var userAuth = redisAuth.CreateUserAuth(new UserAuth
{
UserName = $"UserName{id}",
Email = $"test@email{id}.com",
DisplayName = "First Last",
}, "test");
var redis = redisManager.GetClient();
var fromRedis = redis.As<IUserAuth>().GetById(userAuth.Id);
fromRedis.PrintDump();
使用自定义 UserAuth 类型
如果您使用的是自定义 UserAuth
模型,您还应该将 RedisAuthRepository<TUserAuth,TUserAuthDetails>
的通用版本与自定义 UserAuth、UserAuthDetails 表的类型一起使用,例如:
container.Register(c =>
新的 RedisAuthRepository(
c.Resolve()));
我在尝试使用 ServiceStack RedisAuthRepository 存储用户信息时遇到了这个问题,因此我可以用它来补充嵌入在 JWT 令牌中的用户 Session。到目前为止,这是我的会议。
Plugins.Add(new AuthFeature(() => new PlatformSession(),
new IAuthProvider[] {
new JwtAuthProvider(AppSettings) {
ExpireTokensIn = TimeSpan.FromSeconds(120),
ExpireRefreshTokensIn = TimeSpan.FromDays(14),
AuthKeyBase64 = ConfigurationManager.AppSettings["jwt.AuthKeyBase64"],
CreatePayloadFilter = Payload.CreatePayloadFilter,
RequireSecureConnection = false
},
new CustomCredentialsAuthProvider()
}
));
var redisClientsManager = new RedisManagerPool("localhost:6379");
container.Register<ICacheClient>(c => c.Resolve<IRedisClientsManager>().GetCacheClient()).ReusedWithin(Funq.ReuseScope.None);
container.Register<IRedisClientsManager>(c => redisClientsManager);
container.Register<IAuthRepository>(c => new RedisAuthRepository(c.Resolve<IRedisClientsManager>()));
我的问题是,当我对用户进行身份验证时,redis 中似乎没有保存任何内容。甚至以为我添加了一个测试用户什么也没有显示。
var authRepo = (IUserAuthRepository)HostContext.TryResolve<IAuthRepository>();
try
{
authRepo.CreateUserAuth(new User
{
UserName = "1",
UserId = 1,
ActiveCustomerId = 1
}, "test");
}
catch (Exception) {
编辑: 解决了。 我的问题是分配给 object 的用户名无效,这就是它从未被存储的原因...
RedisAuthRepository 确实将 UserAuth 保存在 Redis 中,如此 RedisAuthRepository example in Gistlyn:
var redisManager = new RedisManagerPool("localhost:6379");
var redisAuth = new RedisAuthRepository(redisManager);
var id = new Random().Next(1,10000);
var userAuth = redisAuth.CreateUserAuth(new UserAuth
{
UserName = $"UserName{id}",
Email = $"test@email{id}.com",
DisplayName = "First Last",
}, "test");
var redis = redisManager.GetClient();
var fromRedis = redis.As<IUserAuth>().GetById(userAuth.Id);
fromRedis.PrintDump();
使用自定义 UserAuth 类型
如果您使用的是自定义 UserAuth
模型,您还应该将 RedisAuthRepository<TUserAuth,TUserAuthDetails>
的通用版本与自定义 UserAuth、UserAuthDetails 表的类型一起使用,例如:
container.Register(c => 新的 RedisAuthRepository( c.Resolve()));