где может храниться информация о пользователе в основном проекте API ядра .net с угловым - PullRequest
0 голосов
/ 16 сентября 2018

У меня угловой проект, и я использую .net core 2.o Web API. Я сохранил свою информацию о пользователе в JWT, и я хочу, чтобы журнал каждой операции базы данных. Я могу получить доступ к информации о пользователе, отправив jwt и взяв из request.header на стороне сервера. Но проблема в том, где можно хранить? В моих старых проектах MVC, я мог хранить в сессии. Но этот проект API. И мы работаем с JWT, а не сессией. Как я могу достичь этого хранилища UserInfo во время запроса начала до конца. И я хочу получить доступ к UserInfo отовсюду. Это мой actionFilter:

 public class TestFilterAttribute : System.Web.Http.Filters.FilterAttribute, IActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext context)
        {
            var requestedUserInfo= context.HttpContext.Request.Headers["Authorization"];
            ??????????????? = requestedUserInfo;
        }
        public void OnActionExecuted(ActionExecutedContext context)
        {
        }
    }

Моя архитектура такая:
Contoller => Сервис => Репозиторий. Итак, я должен отправить параметры как UserInfo во всех методах. Поэтому я не хочу добавлять все параметры метода как UserInfo. Итак, я хочу научиться избавляться от этой проблемы.

MyController.cs

 [HttpGet("GetAllStudents")]
 public async Task<ServiceResult>GetAllStudents()
    {
        var requestedUserId= context.HttpContext.Request.Headers["Authorization"];
        return await (studentService.GetAllStudents(requestedUserId));
    }

Мой сервис.cs

 public async Task<ServiceResult> GetAllStudents(int requestedUserId)
    {
        return await unitOfWork.studentRepo.GetAllStudents(requestedUserId);
    }

Мой репозиторий.cs

public async Task<List<Student>> GetAllStudents(int requestedUserId)
        {
          LogOperation(requestedUserId);
          return context.Students.ToList();
        }

Вы можете видеть, что каждый метод отправляет requestUserId. Как я могу избавиться от этого?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Я нашел решение.Наша пользовательская информация уже хранится в HttpContext.« HttpContextAccessor » - это то, что я искал.Вы можете внедрить с помощью внедрения зависимостей, а затем использовать из любого места (например, класс dbcontext или класс репо)

public class StudentService : IStudentService
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public StudentService(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

public async Task<List<Student>> GetAllStudents()
    {
        var requestedUserId= _httpContextAccessor.HttpContext.Headers["Authorization"];
        LogOperation(requestedUserId);
        return context.Students.ToList();
    }
}
0 голосов
/ 16 сентября 2018

вы не сохраняете его, Angular должен отправлять JWT в каждом запросе, а веб-интерфейс Asp.Net Core должен открыть его, проверить его, а затем прочитать пользователя, который сделал запрос из него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...