Как переопределить «OnActionExecuting», определенный в классе запуска внутри контроллера? - PullRequest
0 голосов
/ 29 мая 2019

Этот код запускается для каждого входящего запроса, чтобы проверить, содержит ли он действительный токен JWT.

services.AddMvc(options => 
       options.Filters.Add(typeof(JwtAttribute)));

Это то, что я хочу в большинстве случаев, за исключением первого раза (когда пользователь пытается войти в систему). Поскольку он запускается при каждом запросе, пользователь не может войти в систему.

Я пытался добавить атрибут поверх действия входа, но он все еще не работает.

[HttpPost]
[AllowAnonymous]
public async Task<JsonResult> Login([FromBody]Credentials formData)
{

}

Что я должен сделать, чтобы переопределить OnActionExecuting в классе запуска только в этом одном случае, чтобы пользователь мог войти в систему.

Спасибо за помощь

1 Ответ

1 голос
/ 29 мая 2019

Используя собственный фильтр вместо встроенной системы аутентификации и авторизации, вы не сможете использовать [AllowAnonymous] здесь, поскольку это напрямую связано с платформой аутентификации.

Что вы можетесделать, это добавить дополнительные метаданные, которые вы затем проверить как часть вашего фильтра JwtAttribute.Например, создайте другой атрибут, например, так:

public class DisableJwtAttribute : Attribute, IFilterMetadata
{ }

Теперь вы можете добавить этот атрибут в действие вашего контроллера с помощью [DisableJwt].

А внутри фильтра JwtAttribute вы можетеТеперь проверьте существование этого фильтра, чтобы прекратить обработку запроса.Например, если ваш фильтр является фильтром авторизации, он будет выглядеть следующим образом:

public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
    if (context.Filters.Any(item => item is DisableJwtAttribute))
        return;

    // filter is active
}

При этом, решение лучше будет заключаться в том, чтобы охватить систему аутентификации и обеспечить проверку JWTчасть нормального процесса аутентификации.Таким образом, вы можете воспользоваться всеми преимуществами аутентификации и авторизации в ASP.NET Core.

...