Как создать кэш Redis при запуске на событие пользователя OnSignedIn? - PullRequest
0 голосов
/ 15 января 2020

. NET CORE 3.1

Я получил ответ о том, как выйти из системы всех клиентов с Identity Server.

Я работаю на этом примере (глава) РЕВОКАЦИЯ.

Но теперь у меня появилась новая проблема. В событии OnSignedIn я хочу добавить идентификатор пользователя в Redis Cache, но я не знаю, как.

Это плохая практика:

var sp = services.BuildServiceProvider();
var cache = sp.GetService<IDistributedCache>();
cache.SetString("helloFromRedis", "world");
var valueFromRedis = cache.GetString("helloFromRedis");
Console.WriteLine(valueFromRedis);

My Startup.cs

public class Startup
{
   public Startup(IConfiguration configuration)
   {
       Configuration = configuration;
   }

   public IConfiguration Configuration { get; }

   public void ConfigureServices(IServiceCollection services)
   {
     services.AddStackExchangeRedisCache(options =>
     {
        options.Configuration = RedisString;
     });


     services.AddAuthentication(options =>
     {
        options.DefaultScheme = "Cookies";
        options.DefaultChallengeScheme = "oidc";                              
     })
      .AddCookie("Cookies", options =>
      {
         options.Cookie.HttpOnly = true;                   
         options.ExpireTimeSpan = TimeSpan.FromMinutes(10);
         options.SlidingExpiration = true;
         options.Events.OnSignedIn(a => {
               // there I want to resolve cache and put userId from claims.
         });
      })
      .AddOpenIdConnect("oidc", options =>
       {
        //...
      });
   }

Как мне разрешить кэш Redis?

1 Ответ

0 голосов
/ 22 апреля 2020

Вы можете сделать это так:

o.Events.OnSignedIn = ctx =>
{
    var cache = ctx.HttpContext.RequestServices.GetRequiredService<IDistributedCache>();
    return  Task.CompletedTask;
};

RequestServices свойство является экземпляром IServiceProvider.

...