Как мне получить текущего пользователя или текущий идентификатор пользователя из запроса в контроллере (. Net 3.1 и шаблон React SPA)? - PullRequest
0 голосов
/ 27 мая 2020

Теперь приложение представляет собой приложение SPA (одностраничное приложение), использующее ASP. NET Core 3.1 на серверной части и React 16.13.1 на внешней стороне. В частности, я создал приложение, используя cli: dotnet new react -o MyReactApp -au Individual do tnet.

В любом случае, у меня возникают проблемы с получением текущего пользователя, вошедшего в систему (или даже идентификатора текущего пользователя, вошедшего в систему) в контроллере (или где-нибудь еще). Я пробовал так много вещей, и в каждом отдельном случае текущий пользователь и / или текущий идентификатор пользователя всегда возвращаются как NULL.

Первое, что я попробовал, это код, который работал в последнем приложении, которое я создал, в котором использовались ASP. NET Core 3.1 и Angular (с той лишь разницей, что последнее приложение использовало angular вместо того, чтобы реагировать). Код, который работал для получения текущего пользователя в этом последнем приложении, был следующим:

Сначала в Startup.cs:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

Затем в Контроллере сначала я импортировал вышеуказанное (HttpContextAccessor ), а также UserManger и некоторые другие полезные вещи:

        private readonly UserManager<ApplicationUser> _userManager;
        private readonly ApplicationDbContext _context;
        private readonly IHttpContextAccessor _httpContextAccessor;

        public UserImgController(
            ApplicationDbContext context,
            UserManager<ApplicationUser> userManager,
            IHttpContextAccessor httpContextAccessor,
        )
        {
            _context = context;
            _userManager = userManager;
            _httpContextAccessor = httpContextAccessor;
        }

Затем я смог получить текущего вошедшего в систему пользователя следующим образом:

ApplicationUser user = await _userManager.GetUserAsync(User)

Наконец, я смог для получения текущего вошедшего в систему userId примерно так:

string userId = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;

Теперь, чтобы повторить, это был код, который я использовал с последним созданным мной приложением, ASP. NET Core 3.1 & Angular применение. По какой-то причине тот же код НЕ работает с моим последним приложением, ASP. NET Core 3.1 и React. Каждый метод, который я пытался получить либо для текущего «пользователя», либо для текущего «userId», всегда возвращает NULL. Каждый. Время.

Я не совсем уверен, откуда ASP. NET Core получает текущий user / userId, что усложняет дело. Однако я считаю, что каждый запрос, отправленный клиентом, вошедшим в систему, на сервер, содержит Cook ie либо с sessionId, либо с userId; И вот как приложению удается сохранять состояние пользователя.

В любом случае, как мне получить текущий зарегистрированный пользователь / идентификатор пользователя из запроса? Или почему, несмотря на то, что пользователь вошел в систему, текущий пользователь / идентификатор пользователя всегда возвращается как NULL?

...