Как использовать Redis кэш в фильтре авторизации? - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу сохранить свои учетные данные в кэше Redis для аутентификации.Для этого я создал фильтр.Но я не смог использовать (внедрить) IDistributedCache в фильтре.

public class Authorization : AuthorizeAttribute,IAuthorizationFilter
{
    IDistributedCache distributedCache;
    public void OnAuthorization(AuthorizationFilterContext filterContext)
    {
        //Authentication

        bool skipAuthorization = filterContext.Filters.Any(item => item is IAllowAnonymousFilter);
        if (skipAuthorization)
        {
            return;
        }
        try
        {

            string token = distributedCache.GetString("TokenValue");
            if (token == null)
            {
                // unauthorized!
                filterContext.Result = new UnauthorizedResult();
            }
        }
        catch (InvalidOperationException)
        {
            filterContext.Result = new UnauthorizedResult();
        }
    }
}

Если я сгенерирую конструктор для вышеупомянутого класса и введу IDistributedCache в конструкторе, то при использовании этого фильтра я получу ошибку

Так есть ли другой способ использовать кэш redis в фильтрах?

1 Ответ

0 голосов
/ 03 декабря 2018

Конечно, вы можете сгенерировать конструктор и IDistributedCache в качестве параметра

Затем вы можете зарегистрировать фильтр для такого действия: [TypeFilter(typeof(Authorization))]

Пример кода:

[HttpGet]
[TypeFilter(typeof(AuthorizationFilterAttribute))]
public ActionResult<IEnumerable<string>> Get()
{
    return new string[] { "value1", "value2" };
}
...