Теперь приложение представляет собой приложение 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?